当指针本身定义的类型不同十,指向的一次性取值长度也不同
数组元素的指针
数组存放字符串
数组存放字符串时存放在栈区,sizeof(str1) ==128字节
字符指针指向字符串
str2此时存放的是h的地址,因此sizeof(str2) == 4字节或者8字节
并且文字常量区是只读的不允许赋值
指针数组
因此这样输出的单个字符
下面这样才能输出整个字符串
二维数组
数组指针
数组首元素地址和 数组首地址
int arr[5] = {1,2,3,4,5};
数组首元素地址:&arr[0] == arr ,arr+1 跳过一个元素 即4个字节的空间
数组的首地址:&arr &arr+1 跳过整个数组即20个字节的空间
数组指针 :本质是指针变量 保存的是数组的首地址
int (*p)[5] = NULL ;//数组指针p 可以保存int arr[5]这样数组首地址,sizeof(p)//44字节
注意:int *pr[5] ;//指针数组 每个元素都是int *
int (*p)[5] = &arr;
对数组首地址取* == 数组首元素地址 →*p == *&arr == arr
即 *(arr+2) == *(*p +2) ==*(*(p+0)+2) ==*(p[0] +2) == p[0][2]
数组指针的案例
int Arr[5] = {10,20,30,40,50};
int (*pt)[5] = &arr;//数组指针
cout<<*((int *)(pt+1) -2)<<endl;//40
因为pt+1 跳过整个数组,然后(int *) 优先级大于 - 所以pt+1 先被强制转为int * 然后才因此-2 就跳过8个字节所以指向40