初学C语言经常搞不清数组名的用法,以及数组名和指针的关系。本文对其进行了总结,并给出了实际的代码进行验证。
数组名就是首元素的地址
但有2个例外:
1. sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节
2. &数组名,这里的数组名表示整个数组,取出的是数组的地址
例题1
int main()
{
char *pcColor = "blue1"; //定义一个指针,并指向一个字符串
char acColor [] = "blue1"; //定义一个字符数组
printf("%d\n", strlen(pcColor)); //传入的是一个指针,指向常量字符串的第一个元素的地址
printf("%d\n", strlen(acColor)); //传入的是一个字符数组的数组名,指向第一数组元素的地址
printf("%d\n", sizeof(pcColor)); //输入指针
printf("%d\n", sizeof(acColor)); //输入数组名,指向整个数组
return 0;
}
例题2
int main()
{
int arr[10] = { 1,2,3,4,5};
printf("%p\n", arr); //首元素地址,类型是int*
printf("%p\n", &arr[0]);//首元素地址,类型是int*
printf("%p\n", &arr); //整个数组的指针,类型是int (*)[10]
printf("--------------------\n");
printf("%p\n", arr+1); //地址向前一位,指向第二个元素地址
printf("%p\n", &arr[0]+1); //向前增加了一个元素的长度(4)
printf("%p\n", &arr+1); //向前增加了整个数组的长度(4 * 10 = 40 = 0x28)
return 0;
}