概念:指针是一个新的数据类型,带 N 个 * 号的数据类型,任何一个数据类型后面都能跟上 N 个 * 号;
声明:
1)char** x ; char*** x; char******* x;
2)short** y; short*** y; short******** y;
3)int** z; int*** z; int******** z;
4)double** k; double*** k; double******** k;
赋值:
1)简化写法:int x ; x = 10 ;
2)完整写法:int * x ; x = ( int * ) 10 ; 告诉编译器怎样看待后面的值10,*号类型赋值必须用完整写法。
特征:
1)所有指针类型的 [ 数据宽度 ] :4 字节(32bit)
2)++ 或者 --(++或--操作,到底加几还是减几?
答:砍掉一个*号,是什么类型宽度,那么++和--就自加或自减砍掉一个*号后的类型宽度)
3)+ 上 或者 - 去,一个整数
4)两个指针类型:求差值
答:可以相减,但是*号的数量和类型必须相同,相减后除以类型的宽度(判断类型宽度就砍掉一个*号后的);
5)指针类型之间:做大小比较
答:可以相减,但是*号的数量和类型必须相同。
指针高级用法(※ 星行之旅 ※),将指针运算转换成数组寻址模式
char x;
char* p1; char** p2; char*** p3; char**** p4; char***** p5; char****** p6;
x = *p1 = *(p1+0) = p1[ 0 ]
x = *(*(p2+1)+3) = p2[ 1 ][ 3 ] 内存寻址---> +4 +3
x = *(*(*(p3+1)+2)+3) = p3[ 1 ][ 2 ][ 3 ] 内存寻址 ---> +4 +8 +3