zoukankan      html  css  js  c++  java
  • 011 关于指针只读和指针指向的对象只读

    一.C语言声明的优先级规则(C专家编程) 

    A  声明从它的名字开始读取,然后按照优先级顺序依次读取。
    B  优先级从高倒低依次是:
          B.1  声明中被括号括起来的那部分
          B.2  后缀操作符:括号()表示这是一个函数,而方括号[]表示这是一个数组。
          B.3  前缀操作符:星号*表示"指向...的指针"。
    C  如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用与类型说明符。在其它情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。 

    二.实例:
    对于下面的三种声明:
    const int * grape;
    int const * grape;
    int * const grape_jelly;
    按照C语言声明的优先级规则,在最后一种情况下,指针是只读的,而在另外两种情况下,指针所指向的对象是只读的。
    当然对象和指针有可能都是只读的,像下面的声明:
    const int * const grape_jam;
    int const * const grape_jam;
    三.测试代码:
    当你对只读的指针进行赋值时,编译时不能通过:
    #include <stdio.h>
    
    int main()
    {
        int a=12,b=13;
        int * const ap=&a;  /*当前指针是只读的,也就是说指针不能指向其它变量了!*/
        ap=&b;
        printf("%d
    ", *ap);
        return 0;
    }

    eclipse中提示的错误:错误:向只读变量‘ap’赋值

    当然,我们依然有办法对只读的指针变量进行赋值

    #include <stdio.h>
    
    int main()
    {
        int a=12,b=13;
        int * const ap=&a;  /*当前指针是只读的,也就是说指针不能指向其它变量了!*/
        *(int **)&ap=&b;
        printf("%d
    ", *ap);
        return 0;
    }


  • 相关阅读:
    web设计_6_图片/标题/说明文字布局
    web设计_5_自由的框式组件
    web设计_4_可扩展的行
    ubuntu下把python脚本转为二进制字节码文件
    Ubuntu与Window双系统安装的注意事项
    安装Windows和Ubuntu双系统2
    安装Windows和Ubuntu双系统
    Configuring and Running Django + Celery in Docker Containers
    ggplot绘图之基本语法
    R Multiple Plots
  • 原文地址:https://www.cnblogs.com/ruo-yu/p/5085318.html
Copyright © 2011-2022 走看看