1.常量指针:
例如: int const *a ;
const int *a ;
指针常量:
int * const a;
从左到右const先靠近谁, 就读谁: int const *a ; int是常量 所以读作常量指针
比如int * const a; *更靠近const 所以读作 指针常量
2.常量指针和指针常量 的区别:
常量指针修饰的是 int ,所以常量不能变,但可以通过指针指向修改值;
指针常量修饰的是* ,所以指针指向不能修改,但是指向的内容可以修改。
说道指针常量和常量指针,又想叨叨 指针数组和数组指针了......
3.指针数组和数组指针
指针数组:int *aar [5] ={1,2,3,4,5};
数组指针:int (*aar)[5]={1,2,3,4,5};
主要看修饰的数组还是指针,比如aar[5] 中括号的优先级高于号,所以修饰的是数组,
将数组放后面,指针放前面;所以读作指针数组
比如(*aar)[5] 括号的优先级高于中括号的优先级,所以修饰的是指针,
将指针放后面,数组放前面;所以读作数组指针
结合上图
可以知道数组指针,和指针数组的步长 即 p++,移动的字节数。
int *aar [5] ={1,2,3,4,5};
aar++;
因为aar指向的是指针,所以步长为8字节
int (aar)[5]={1,2,3,4,5};
数组指针指向的是int ,所以 aar++,步长应为 45 =20
结构体
网友评论