gpt4 book ai didi

c - 设置指向堆栈内存块的指针?

转载 作者:行者123 更新时间:2023-11-30 18:11:22 26 4
gpt4 key购买 nike

我想创建一个指向堆栈内存块的指针。我不想复制内容,只想有一个指向它的指针。我该怎么做呢?

这是我尝试过的...

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...

最佳答案

你必须区分指针和数组。

char **p 表示 p 是指向 char 的指针。请改用 char *p

char *p = &pc;

这不会使您能够使用 p[x][y] 表示法。为此,我们可以这样做:

char (*p)[2] = pc;

当我尝试你的代码时它有效。这是完整的主要部分:

int main()
{
char pc[3][2] = { 1,2,3,4,5,6 };
char (*p)[2] = pc;
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]);
}

它编译时没有警告(好吧,我没有引入任何以前不存在的警告)并输出:

$ ./a.out 

LIST:1,3,5,2,4,6

要删除警告,请更改

char pc[3][2] = { 1,2,3,4,5,6 };

char pc[3][2] = { {1,2},{3,4},{5,6} };

感谢 M.M 的改进。

关于c - 设置指向堆栈内存块的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48103600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com