怎么样自己建设一个网站,东营最新消息今天,apache网站部署,0453牡丹江信息网手机版一.指针数组和数组指针的区别 1.指针数组是数组#xff0c;是一种存放指针的数组#xff1b; 例如#xff1a; int* arr[10]; 2.数组指针是指针#xff0c;是一种指向数组的指针#xff0c;存放的是数组的地址#xff1b; 例如#xff1a; int arr[5]; int (p)[5]a…一.指针数组和数组指针的区别 1.指针数组是数组是一种存放指针的数组 例如 int* arr[10]; 2.数组指针是指针是一种指向数组的指针存放的是数组的地址 例如 int arr[5]; int (p)[5]arr; 由于[ ]的优先级高于所以需要用让p和*先结合 二.辨析arr和arr 数组名绝大部分情况是数组首元素的地址 但有两个例外 1.sizeof数组名sizeof内部单独放一个数组名的时候数组名表示整个数组计算得到的是数组的总大小 arr这里的数组名表示整个数组取出的是数组的地址从地址值的角度来讲和首元素的地址是一样的但意义不一样 例1
#includestdio.h
int main()
{int arr[10]{0};printf(%p\n,arr);//%p用来打印地址printf(%p\n,arr[0]);printf(%p\n,arr);return 0;
}这个例子很好的解释了“从地址值的角度来讲和首元素的地址是一样的”但看到这里肯定有人会疑惑arr和arr到底有什么区别我们接着往下看。 例2
#includestdio.h
int main()
{int arr[10]{0};printf(%p\n,arr);printf(%p\n, arr1);printf(%p\n,arr[0]);printf(%p\n, arr[0]1);printf(%p\n,arr);printf(%p\n, arr1);return 0;
}由此可见1后的地址有所差异这是因为他们所指的意义不一样 第一组arr表示首元素的大小类型为int*加1跳过一个整型指针的大小大小为4/8字节 第二组arr[0]表示首元素大小类型为int*加1跳过一个整型指针的大小大小为4/8字节 第三组arr表示整个数组的大小类型为int(*)[10],加1跳过一个整型数组指针的大小大小为40个字节 为什么第三组类型是int(*)[10]? int (p)[10]arr; 存放数组需要用到数组指针所以用数组指针p接受arr这个数组的地址 将指针名去掉剩下的就是指针类型即int ()[10],数组指针的大小和数组的类型以及开辟的空间有关该数组指针指向的是整型数组开辟了10个空间所以大小为4*1040