我很困惑 if int (*number)[2];在 C 中返回 A) 一个多维数组,每个子数组包含 2 个元素或 B) 一个包含 2 个元素的数组?当我阅读之前的一些问题时,一致认为它返回一个包含 2 个元素的数组。然而,看看这个例子,答案似乎并非如此:
#include <stdio.h>
int main() {
int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int (*number)[2];
number = arr;
printf("First element: %d %d\n", (*number)[0], (*number)[1]); // prints "1 2"
number++;
printf("Second element: %d %d\n", (*number)[0], (*number)[1]); // prints "3 4"
return 0;
}
有人可以澄清这个案例并可能向我指出相关文件吗?非常感谢!
int (*number)[2];
声明一个指向 2 个整数数组的指针。
int arr[3][2]
声明一个二维数组,其行是由2个整数组成的数组。
number = arr;
相当于
number = &arr[0];
(参见 什么是数组到指针的转换又名:衰减?)所以现在
number
指向 arr
的第一行。
number++
之后,指向arr
的第二行。