在这里,我有一个指向4个整数的ptr
数组arr
的指针。ptr
指向整个数组。ptr[0]
或*ptr
指向数组的第一个元素,因此加1即可ptr[0]
得出数组第二个元素的地址。
我不明白为什么使用sizeof(ptr[0])
给出整个数组的大小16个字节,而不是第一个元素的大小4个字节(ptr[0]
指向数组中第一个元素)。
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;
吗? 其实没有 int (*ptr)[4]
创建ptr
一个指向四个int
值的完整数组的指针。像这样的指针语法对于动态分配真实多维数组是必需的。用嵌套malloc()
循环创建并被错误描述为多维数组的“二维数组” 实际上是指向多个1维数组的指针的1维数组。参见stackoverflow.com/questions/42094465/…–
int *ptr = arr;
吗?这将使其指向数组的开始(第一个元素),它等效于&arr[0]
。