gpt4 book ai didi

c - 为什么不能访问指向堆栈数组的指针?

转载 作者:行者123 更新时间:2023-12-03 07:27:24 25 4
gpt4 key购买 nike

请看下面的代码。它尝试将数组作为char**传递给函数:

#include <stdio.h>
#include <stdlib.h>

static void printchar(char **x)
{
printf("Test: %c\n", (*x)[0]);
}

int main(int argc, char *argv[])
{
char test[256];
char *test2 = malloc(256);

test[0] = 'B';
test2[0] = 'A';

printchar(&test2); // works
printchar((char **) &test); // crashes because *x in printchar() has an invalid pointer

free(test2);

return 0;
}

我只能通过将 &test2显式转换为 char**来进行编译,这一事实已经暗示该代码是错误的。

不过,我想知道这到底有什么问题。我可以将指针传递给动态分配的数组的指针,但是不能将指针传递给堆栈上的数组的指针。当然,我可以通过首先将数组分配给一个临时变量来轻松解决该问题,如下所示:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);

还有,有人可以向我解释为什么直接将 char[256]转换为 char**无效吗?

最佳答案

因为test不是指针。
&test为您提供了一个指向char (*)[256]类型的数组的指针,该指针与char**不兼容(因为数组不是指针)。这导致未定义的行为。

关于c - 为什么不能访问指向堆栈数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60016986/

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