在 写程序的时候,经常会看到数组首地址和数组第一个元素的地址值相同,那么它们又什么区别呢?
这里还是以程序举例:
#include <stdio.h>
int main(void)
{
char book[50] = {"C Primer Plus"};
printf("book的首地址:%p\n", book);
printf("book[0]第一个元素的地址:%p\n", &book[0]);
printf("book[0]第一个元素的值:%c\n", book[0]);
printf("\n");
printf("book:%d\n", sizeof(book));
printf("&book[0]:%d\n", sizeof(&book[0]));
printf("book[0]:%d\n", sizeof(book[0]));
return 0;
}
分析过程:数组名book
代表整个数组的首地址(把数组作为一个整体作为单位),&book[0]
代表数组中第一个元素(即一个char)的地址(把数组的一个元素作为单位)。
其次,虽然数组首地址和数组第一个元素的地址相同,但数组名book
首地址空间是 50
,而数组第一个元素的地址空间是 4
。当然数组第一个元素的空间是 1
(即一个 char 大小)
结论:
-
数组名和数组第一个元素的地址相同
-
虽然地址相同,但地址所表示的内存空间不一样