#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[]={1,2,3,4};
printf("%p\n",arr);
printf("%p\n",&arr);
printf("%p\n",*arr);
return 0;
}
结论:数组名是数组首元素地址(下标为0的元素是首元素)
例外:
1、sizeof(数组名),该数组数组名表示整个数组,sizeof计算数组大小,单位字节
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[10]={0};
printf("%d\n",sizeof(arr));
return 0;
}
2、&(数组名),数组名代表整个数组,取出的是整个数组的地址
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[]={1,2,3,4};
printf("%p\n",arr);
printf("%p\n",&arr[0]);
printf("%p\n",&arr);
return 0;
}
输出的结果是一样的,但是&(arr)的地址代表的是从第一个数组元素开始,分别+1发现输出结果不通,因为&arr+1输出的是数组的地址,而其他输出的是数组中首元素+1的元素地址(第二个元素地址)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[]={1,2,3,4};
printf("%p\n",arr);
printf("%p\n",arr+1);
printf("\n");
printf("%p\n",&arr[0]);
printf("%p\n",&arr[0]+1);
printf("\n");
printf("%p\n",&arr);
printf("%p\n",&arr+1);
return 0;
}