读书人

数组名和数组名添地址符的区别(了解指

发布时间: 2013-04-09 16:45:09 作者: rapoo

数组名和数组名加地址符的区别(了解指针)
问题发现在int *p[4]和int (*ip)[4]的区别?
为了明白这个区分,做个小例子验证以下是验证代码 int *p[4];int a=0;int *q=NULL;p[0]= &a;p[1]=q;
int (*ip)[4];int arr[4]={1,2,3,4};ip=&arr;// 当我(ip = arr;)不用地址符号的时候是编译不过的int brr[4]={11,22,33,44};ip = &brr;// 当我(ip = brr;)不用地址符号的时候是编译不过的
为什么编译不过呢?数组名是指针,指向数组中第一个元素的。数组名加地址符的时候就指向整个数组的地址。为了验证这个问题的正确性,以下是例子:可以看出结论是正确的,a和&a的区别就是指向的地址数组的地址和数组首个元素的地址一样,但类型不一样,&a是指向数组的地址,加一就相当于加了整个数组的长度。而a+1就相当于加了一个元素的值。int a[2] = {1,2};printf("a=%p\n",a);printf("&a=%p\n",&a);printf("a+1 = %p\n",a + 1);printf("&a+1 = %p\n",&a + 1);运行结果如下:数组名和数组名添地址符的区别(了解指针)
int a[4] = {1,2,4,7};printf("a=%p\n",a);printf("&a=%p\n",&a);printf("a+1 = %p\n",a + 1);printf("&a+1 = %p\n",&a + 1);运行结果如下:数组名和数组名添地址符的区别(了解指针)

读书人网 >编程

热点推荐