C语言零星笔记--(const、typedef)

来源:互联网 发布:大数据阅读答案 编辑:程序博客网 时间:2024/05/27 00:59

      好不容易偷闲,去逛了下论坛,这手贱的又点到了技术区,看了个哥们的问题,就是const和typedef结合在一起会出现什么情况,那百度和360结合会是什么况。。。。    

      描述下问题:

    

typedef int* p2i;int a = 2;int b = 3;int c = 4;const int *pa = &a; //不能用pa修改a的值,*pa = valueconst p2i  pb = &b;//pb不能指向其他地址,pb = valuep2i const  pc = &c;//pc不能指向其他地址,同上。


这里涉及了两点:(1)const的先左还是先右结合 (2)typedef的效果 (3)变量的类型

(1)const 向左走向右走:const的意义就是只读,读书,“只读经典型”,就是const先向右走,如果右侧有类型符,如int,float、、之流,就跟类型符结合。若没有,则向左走,跟左侧的*符结合。

(2)typedef与#define有区别,其中之一就是typedef封装性,或者叫原子性,即通过typedef将目标封装成整体,并起了个新的名字(典型贴牌山寨机)。但效用等价。

 对于const  int  *pa = &a;

  (3)变量的类型:就是这是个什么变量,找到变量,查看其右,若为(),则表示函数,若为 [ ] 则为数组,查看其左,左侧为 * ,则表示指向 XXoo 的指针。

则const int  *pa = &a,const与类型为int 的类型结合,pa与 *结合,综合起来:pa是个指针,一个指向只读整形的指针。即pa指向的内容不能变。但pa的指向可以变。

const   p2i  pb = &b:pb右侧无(),[ ],即pb非数组,也不是函数,左侧没见到指针符号 *(被封装了),故pb仅仅是个变量,类型为只读p2i型的变量,将p2i的意义加进去,pb就是个只读指针变量,即指针的指向不能改变,指向的地址里的内容可以改变。

 

对于p2i const  pc =&c,理解了typedef的封装性,其实雷同于 int const  x 和const int x ,所以,这种情况的意义同上。