【发布时间】:2018-01-04 21:08:09
【问题描述】:
我想创建一个指向堆栈内存块的指针。我不想复制内容,只是有一个指向它的指针。我该怎么做?
这是我尝试过的......
char p[3][2] = { 1,2,3,4,5,6 };
printf("\nLIST:%d,%d,%d,%d,%d,%d\n", p[0][0], p[1][0], p[2][0], p[0][1], p[1][1], p[2][1]); //works fine
char pc[3][2] = { 1,2,3,4,5,6 };
char **p = (char**)pc;//No error here... but shows on next line when accessing through the pointer
printf("\nLIST:%d,%d,%d,%d,%d,%d\n", p[0][0], p[1][0], p[2][0], p[0][1], p[1][1], p[2][1]); //ERROR: an Exception thrown here...
【问题讨论】:
-
a 会降低它,因为它是用户定义的类型。
-
重新打开 - 这是一个 C 问题,其他建议是 C++ ,无论如何问题是不同的(在这个 OP 上只想要
char (*p)[2]而在另一个问题上 OP 想要指向指针的指针)跨度> -
@M.M.的确如此,尽管鉴于 OP 报告了建议的解决方案的错误消息,我怀疑他正在使用 C++ 编译。我不同意这个问题是不一样的但是。该问题明确显示了访问
pointer[0][1]的尝试,而指针对指针将不起作用这里的代码片段或多或少相同。然而,接受的答案是不正确的 - 后面有更多选票的答案是正确的。 stackoverflow.com/questions/10165627/… -
@Clifford in C 答案是很好的做法,但不是该答案所建议的 infinitely nasty。 (实际上我也不会在 C++ 中称它为无限讨厌)。那个线程上的 OP 说那个答案并没有解决他们的问题。
-
@M.M.它没有解决问题,因为他误解了答案。它是一个指向任意数量的一维数组的指针,每个数组都可以被索引。答案缺少的是使用二维指针通过指针访问数组内容的演示。
标签: c pointers visual-c++ stack visual-c++-2017