二级指针
int main() //二级指针
{
int a = 10, b = 20;
int* p = nullptr;
int** s = nullptr;
s = &p;
*s = &a;
**s = 100;
*s = &b;
**s = 200;
return 0;
}
(int型)
s+1 int型二级指针 指向p1的地址(&p1)
*s+1 int型一级指针 指向a1的地址(&a1)
**s+1 int型 指向值a0+1(1)
(double型)
s+1 返回p1地址,类型是double** 加4字节
s+1 返回a1地址,类型double
加8字节 =>*s+sizeof(double)*1
**s+1 值a0+1,不加字节
二维数组
&ar与ar
数值上相同
类型不同
&ar:整个数组首地址 &ar+1 加16字节
ar: 数组首元素地址 ar+1 加4字节
s => &ar0;
s =>
&ar0 => ar0
指针形式转为数组形式
*( *(s+2)+3) = 100;
*(s[2] + 3)= 100;
s[2] [3] = 100;
int ar[4]; //一维数组
sizeof(ar); //16;
int* p = ar;
int(*s)[4] = &ar;
int br[3][4]; //二维数组
sizeof(ar); //48; //type + row + col;
int(*p)[4] = br;
int (*s)[3][4] = &br;
数组形式转为指针形式
int main()
{
int ar[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
int(*s)[2] = &ar[1];
int* p = ar[1]; //*(ar+1)
printf("%d\n", s[2][3]); //10;
//s[2][3] = *(*(s+2)+3) 二维
printf("%d\n", p[3]); //6;
//p[3] = *(ar+1)+3 一维
return 0;
}
版权声明:本文为dovetttt原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。