数组衰减为指向其第一个元素的引用的指针。
int array[10];
array 衰减为指向 int 的指针
&array[0] 衰减到指向 int 的指针
&array[ 衰减为指向 10 个元素的 int 数组的指针
指向 int 的指针和指向 int 数组的指针有什么区别?它们引用不同类型的对象,并且它们的算术根据示例不同:
int array[10] = {1, };
int (*pointer1)[10] = &array;
int *pointer2 = array;
int main(void)
{
printf("sizeof(int) is: %zu, sizeof(*pointer2) is: %zu, sizeof(*pointer1) is: %zu\n", sizeof(int), sizeof(*pointer2), sizeof(*pointer1));
printf("pointer1 = %p, (pointer1 + 1) = %p, (pointer1 + 1) - pointer1 = %zu\n", (void *)pointer1, (void *)(pointer1 + 1), (uint8_t *)(pointer1 + 1) - (uint8_t *)(pointer1));
printf("pointer2 = %p, (pointer2 + 1) = %p, (pointer2 + 1) - pointer2 = %zu\n", (void *)pointer2, (void *)(pointer2 + 1), (uint8_t *)(pointer2 + 1) - (uint8_t *)(pointer2));
}
结果:
sizeof(int) is: 4, sizeof(*pointer2) is: 4, sizeof(*pointer1) is: 40
pointer1 = 0x404040, (pointer1 + 1) = 0x404068, (pointer1 + 1) - pointer1 = 40
pointer2 = 0x404040, (pointer2 + 1) = 0x404044, (pointer2 + 1) - pointer2 = 4
https://godbolt.org/z/BwbfQy