一、指针数组 和 数组指针的区别:
1:指针数组,还是数组,数组每个元素是指针。
2:数组指针,是指针,指向的是数组。
例如:
int p1[10];
int (p2)[10];
“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int 修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。
“()”的优先级比“[]”高,“”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。
二、再论a 和&a 之间的区别
int main()
{
char a[5]={'A','B','C','D'};
char (p3)[5] = &a;
char (p4)[5] = a;
return 0;
}
&a 是整个数组的首地址,&a之后+1,是加一个数组的长度
a是数组首元素的首地址,即a[0]的首地址,a+1是加一个元素的长度即 sizeof(char)
int main()
{
int a[4]={1,2,3,4};
int *ptr1=(int *)(&a+1);
int *ptr2=(int )((int)a+1);
printf("%x,%x",ptr1[-1],ptr2);
return 0;
}
网友评论