数组首地址和数组第一个元素地址

发布时间 2023-03-22 21:16:04作者: eiSouthBoy

在 写程序的时候,经常会看到数组首地址和数组第一个元素的地址值相同,那么它们又什么区别呢?

这里还是以程序举例:

#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 大小)



结论:

  • 数组名和数组第一个元素的地址相同

  • 虽然地址相同,但地址所表示的内存空间不一样