【发布时间】:2015-10-25 05:45:09
【问题描述】:
我正在学习 C 中指向(整个)数组的指针。
假设我声明了一个二维整数矩阵:
int arr[3][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
现在,我声明一个适当类型的指针:
int (*ptr)[3][3];
初始化它:
ptr = &arr;
现在,ptr 包含 arr 的地址。
ptr --->&(arr[0][0] arr[0][1] arr[0][2]
arr[1][0] arr[1][1] arr[1][2]
arr[2][0] arr[2][1] arr[2][2])
所以,当我们取消引用 ptr 时,它应该产生第一个位置,不是吗?
printf("%d", *ptr) 在编译时给出错误。要打印第一个元素,我必须使用***ptr。
我有两个问题:
- 我无法理解三重取消引用的必要性。
- 如果
*ptr不指向数组的第一个元素,它指向什么 到?
【问题讨论】:
-
您为什么希望
*&arr引用arr[0][0]而不是arr?这就像期望*&some_int引用 int 的第一个字节,而不是整个 int。 -
我很困惑,因为 int 是原始类型,而数组是原始类型的集合。与 int 不同,打印数组需要遍历它的所有元素。