指针数组和数组指针
指针数组
本质是数组 数组的每个元素是指针。
void test01()
{
int num1 = 10;
int num2 = 20;
int num3 = 30;
//指针数组
int *arr[3]={&num1, &num2, &num3};
char *arr2[3];
printf("%d\n", *arr[1]);//*arr[1]=*&num2=num2
printf("%d\n",sizeof(arr));//12
printf("%d\n",sizeof(arr2));//12
return;
}
数组指针
本质指针变量 保存的是数组的首地址
void test03()
{
int arr[5]={10,20,30,40};
int (*p)[5];//数组指针:本质是一个指针变量 只是该变量 保存的是数组的首地址
printf("%d\n",sizeof(p));//4
printf("p=%u\n", p);
printf("p+1=%u\n", p+1);
p = &arr;//&arr 才代表数组的首地址
printf("%d\n", *(*p+3));//40
//*(*p+3) == *(*(p+0)+3)==*(p[0]+3)==p[0][3]
printf("%d\n", p[0][3]);//40
}
数组指针 与 二维数组的关系
在这里插入代码片
void test04()
{
int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int i=0,j=0;
//数组指针 本质是指针变量
int (*p)[4] =arr;
printf("%d\n",sizeof§);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
//printf("%d ", *(*(p+i)+j));
printf("%d ", p[i][j]);
}
printf("\n");
}
}
结果