2.二级指针与二维数组

  • Post author:
  • Post category:其他



二级指针

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 版权协议,转载请附上原文出处链接和本声明。