【发布时间】:2021-06-23 16:21:34
【问题描述】:
#include<stdio.h>
int main()
{
int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
printf("%u ,%u\n",arr, &arr+1);
return 0;
}
在打印语句中:(假设整数大小为4字节)
设 arr 的内存位置为 1000
arr+1--给出 1016(即下一行内存)
1000 1004 1008 1012 1016
1 2 3 4 5
&arr+1 给出 1048
我理解逻辑,但我不明白编译器如何将
arr 识别为“指向 4 个整数数组的指针” 和
&arr as 'pointer to array of 3 arrays of 4 integer'
即使两者在递增之前都指向同一个地址(1000)
【问题讨论】:
-
arr衰减为与&arr[0]相同的类型,这是一个由 4 个整数组成的数组。另一方面,&arr是指向 3 x 4 整数数组的指针 -
&arr给你一个指向数组的指针。arr给你一个指向数组第一个元素的指针。
标签: arrays c pointers implicit-conversion pointer-arithmetic