gpt4 book ai didi

c - 在 C 函数中返回字符串,需要解释

转载 作者:行者123 更新时间:2023-12-04 10:51:05 25 4
gpt4 key购买 nike

我明白,为了从函数返回一个字符串,我必须返回一个指针。我不明白的是为什么 char 数组的处理方式与整数有些不同,并且在退出函数时被销毁。这可能是因为我来自高级语言世界,但这对我来说似乎同样有效:

int x = 1;
return x;

char x[] = "hello";
return x;

最佳答案

原因既简单又微妙:C 函数不能声明为返回数组。

当你返回一个指针时,像这样:

char *foo(void)
{
char x[] = "hello";
return x;
}

return x; 实际上返回x。它返回一个指向 x1 的第一个元素的指针——这与所说的完全相同:

return &x[0];

应该更清楚为什么这是不正确的——它与此完全类似:

int *foo(void)
{
int x = 100;
return &x;
}

但是,可以从函数返回结构 - 因此您可以返回一个数组,只要它包含在struct 中。以下是完全可以的:

struct xyzzy {
char x[10];
};

struct xyzzy foo(void)
{
struct xyzzy x = { "hello" };
return x;
}


<补充>1。这是数组类型的特殊情况规则的结果。在表达式中,如果数组不是一元 &sizeof 运算符的主题,则它计算为指向其第一个元素的指针。试图在 C 中确定一个实际的数组有点像试图捕获你手中的雾 - 它只是消失了,取而代之的是一个指针。

关于c - 在 C 函数中返回字符串,需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3508369/

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