先看代码
#include<stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
printf("a = %p\n",a); // 数组名代表首地址 . 000000000064FE30
printf("&a = %p\n",&a); // "&a"代表数组的地址 . 000000000064FE30
printf("a+1 = %p\n",a+1); // 数组名代表首地址 . 000000000064FE34
printf("&a+1 = %p\n",&a+1); // "&a"代表数组的地址 . 000000000064FE44
return 0;
a是数组名, 代表数组的首地址, a+1就是数组的下一个元素的地址(也就是第二个元素的地址)
而&a+1指的就是下一个数组的地址,同时不同数据类型所占的内存不同
如 int型占4个字节 char型占1个字节 float型占4个字节 double占8个字节。
数组与指针的区别:数组是用于储存多个相同类型数据的集合,而指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。但在调用时 &a= a 其中数组名代表首地址,地址会随着数据类型以及元素位置的变化而变化。