形式 | 含义 |
---|---|
int *p | p是一个向int类型变量的指针 |
const int *p | p是一个常量指针,即指向常量的指针,其指向可以发生改变,但其指向的内容不能改变 |
int const *p | 等价于const int *p,p是一个常量指针,即指向常量的指针,其指向可以发生改变,但其指向的内容不能改变 |
int * const p | p是一个指针常量,即指针的常量,其指向不能发生改变,但是其指向的内容可以发生改变 |
const int * const p | p是一个指针(不知道叫啥指针),指针的指向和指向的内存都不能发生变更 |
int arr[5] | arr是一个一维数组,arr实际上也是一个指针常量,其指向不可变,同时&arr是一个指向长度为5个元素的数组的指针,偏移量是4∗54 * 54∗5个字节。也就是说,如果对数组名取地址,取出来的内容和arr一致(它们都是同一个地址),但是含义不同,&arr取出来的地址指向的是一个数组对象,而arr所代表的地址指向的是一个数组元素 |
int *p[5] | p是一个一维数组,该数组含有5个int类型的指针 |
int (*p)[5] | p是指向一个长度为五个元素的数组的指针,p+1实际上的偏移量是4∗54 * 54∗5个字节 |
int (*(*p)(int, int))(int) | p是一个函数指针(中间的(*p)(int, int) ),该函数的有两个int类型都形参,并且返回一个函数指针(该函数有一个形参且返回int) |
int arr[4][5] | arr是一个二维数组,但不是二级指针,arr[0]相当于是一个指向长度为5个元素的数组的指针,即int (*p)[5] ,因此,arr可以作为实参传入形参为int (*p)[5] 的函数 |
int **p | p是一个二级指针,其指向的是一个指向类型变量的指针(*p) ,多级指针的概念类似,按声明处的* 个数来判断是几级指针 |
注:int *f();
或者int *f(),w[10],c;
,这是在声明一个返回指向整型的指针的函数f
,而并非定义指针。