【发布时间】:2015-01-28 04:18:45
【问题描述】:
我正在使用 Visual Studio 2013 for C。
main.c
int main()
{
int arr[2][3] = { { 10, 20, 30 }, { 15, 25, 35 } };
int **pArr = arr;
printf("\n\n----SIZE OF----");
printf("\nSizeOf(arr) = %d", sizeof(arr));
printf("\nSizeOf(pArr) = %d", sizeof(pArr));
printf("\n\n----DEREFERENCING THE ADDRESS----");
printf("\narr = %d *arr = %d **arr = %d", arr, *arr, **arr);
printf("\npArr = %d *pArr = %d **pArr = %d", pArr, *pArr, **pArr); //EXCEPTION thrown here
return 0;
}
查看此图像以了解引发的异常:
在使用断点时,会显示指针 pArr 和数组 arr 中的值:
但是当我从代码的倒数第二行中删除**pArr 部分时,程序输出如下:
----SIZE OF----
SizeOf(arr) = 24
SizeOf(pArr) = 4
----DEREFERENCING THE ADDRESS----
arr = 5569760 *arr = 5569760 **arr = 10
pArr = 5569760 *pArr = 10
指针pArr 是“指向int 指针的指针”类型,因此是arr 的地址。那为什么我使用int **pArr = arr;后无法访问**pArr?
【问题讨论】:
-
Visual Studio 是一个 C++ 编译器,顺便说一下。对于语言的这个有限子集,这无关紧要,但无论如何你都应该意识到这一点。
-
int **pArr = arr是如何编译的?二维数组不会衰减为指针。 -
@paxdiablo 感谢您指出这一点:)
-
@jamesdlin 我也期待一个错误,但坦率地说,它确实编译了。而且我不知道它为什么会这样
标签: c arrays pointers visual-studio-2013