【发布时间】:2015-10-03 05:10:52
【问题描述】:
我正在尝试理解多维数组和指针,写了这个小程序来理解这个概念:
#include<stdio.h>
void show(int arr[][2]);
int main()
{
int z[2][2] = { { 1, 2 },
{3, 4 } };
show(z);
}
void show(int arr[][2])
{
printf("value of arr = %d", arr);
printf("\n\nvalue of &arr[0]0] = %d", &arr[0][0]);
}
这个代码片段打印了相同的地址,这是有意义的,但是当我编辑显示函数时:
void show(int arr[][2])
{
printf("value of *arr = %d", *arr);
printf("\n\nvalue of arr[0]0] = %d", arr[0][0]);
}
*arr 仍然打印相同的地址,而 arr[0][0] 按预期打印整数值,我想知道为什么我需要使用 **arr 来获取 int 值,如果 arr 正在存储地址它应该用 *arr 取消引用,不是吗?
请帮助我很难理解这个概念..提前谢谢。
【问题讨论】:
-
这将有助于停止思考地址。指针可以根据内存地址来实现,但它们不是地址,将它们视为地址会在很多方面搞砸你,而不仅仅是这个。
-
@user2357112 能否请您参考一些好的文本,我可以在其中理解这个概念。
-
*array_or_pointer与 C 中的array_or_pointer[0]相同(类型和值)。
标签: c arrays pointers multidimensional-array double-pointer