指针的分类

来源:互联网 发布:知乎100个经典回答 编辑:程序博客网 时间:2024/05/21 16:58

指针的分类

http://mba.shengwushibie.com/itbook/BookChapter.asp?id=39453

1. 按指向的对象划分
 整型指针、浮点指针、字符指针、数组指针、指针数组、结构体指针、函数指针等。
 int *p_int;
 float *p_float;
 char *p_char;
 char (*p_array)[2];     // 数组指针
 char *p_parray[2];     // 指针数组
 char (*p_func)(int);

2. 按指针的多级性划分
 单级间指、二级间指、三级间指等。
 int *p_int1; //单级
 int **p_int2; //两级
 int ***p_int3; //三级

3. 按指针定以后是否可变划分
 常量指针,可变指针。
 int i_int;    // 整型变量
 int *p_int;    // 指针变量
 const int *p_int2 = &i_int;                       // 指针可变,所指内容不能变。
 int const *p_int3 = &i_int;                       // 指针可变,所指内容不能变。
 int *const p_int4 = &i_int;                       // 指针不可变,所指内容可变。
 const int *const p_int5 = &i_int;            // 指针不可变,所指内容不可变。

 个人理解:关键字const优先匹配其前面的数据类型,如果前面没有,则优先匹配后面第一个数据类型。
 例如:
 int const *p; 优先匹配int,因此数据内容不可变,但指针*没被修饰,可变。
 const int *p; 优先匹配int,数据内容不可变,指针可变。
 int* const p; 优先匹配*,指针不可变,数据内容可变。
 const int* cosnt p; 第一个const修饰int,第二个const修饰*,数据内容和指针都不可变。

 另外:
 int (*p_array)[2]; 因为有括号,*修饰p_array,int只好修饰这个数组,即p_array是一个指向数组的指针。即数组指针
 int *p_parray[2]; 没有括号,*修饰int,说明是一个整形指针,然后修饰数组array,说明这个数组里的每个元素都是一个指针。即指针数组。

 此外:
 指针常量与常量指针,和 数组指针与指针数组一样绕口。
 理解方式:指针在前面不可变,在后面可变
 指针常量:即指针不可变,数据内容可变。
 常量指针:指针可变,数据内容不可变。

原创粉丝点击