区别:
指针数组:定义int*p[n] 可称为指针的数组,是数组,数组里的元素都是指针。也就是说数组存储的是指针,数组占多少字节由数组本身决定。
指针数组+1不同类型的变化如下
//eg:用指针parr指向一个一维数组
int main()
{
int* parr[5] = {0,1,2,3,4};
printf("%x\n",parr);//数组名代替首元素地址
printf("%x\n",parr+1);//数组名+1在64位系统指针占8个字节,地址+8个字节
printf("%x\n",parr+2);//+16
printf("%x\n", *parr);//*数组名--代替首个元素
printf("%x\n", *parr + 1);//*数组名+1在64位系统 int型占4个字节,元素大小类型大小
printf("%x\n", *parr + 2);//8
printf("%x\n", *(parr));//*(数组名)代替第0位置的元素
printf("%x\n", *(parr + 1));//*(数组名+n)代替1的位置元素
printf("%x\n", *(parr + 2));//*(数组名+n)代替2的位置元素
return 0;
}
//eg:使用指针数组打印出I LOVE XYD
int main()
{
char* p[3] = { { "I" },{ "LOVE" },{ "XYD" } };
//数组中每个元素都存储的是指针
for (int i = 0; i < 3; i++)
{
printf("%s ",p[i]);//p[i]存储的是每个数组中元素的首地址
}
return 0;
}
数组指针:定义int(*p)[N] 可称为数组的指针,是指针,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在32位系统下永远占4个字节,64位系统占8个字节,至于它指向的数组占多少字节,这不能确定,要看具体情况。
char(*p)[4] = ;//这里数组长度为4,所有元素均为int类型的指针
//eg:利用数组指针打印出I LOVE XYD
int main()
{
char arr[3][128] = {{"I"},{"LOVE"},{"XYD"}};
char (*p)[128] = arr;
for (int i = 0; i < 3; i++)
{
printf("%s ",*(p+i));//p是一个指针,此时指向的是二维数组里的第一行数组
//*解引用后代表指向其中的元素
}
return 0;
}
标签:int,知识,数组名,parr,数组,printf,指针
From: https://blog.51cto.com/u_16425777/9089137