据我所知,为了从函数返回一个字符串,我必须返回一个指针.我不明白的是为什么char数组被处理与整数有些不同,并且在退出函数时会被销毁.这可能是因为我来自一个高级语言世界,但这对我来说似乎同样有效:
int x = 1;
return x;
char x[] = "hello";
return x;
Run Code Online (Sandbox Code Playgroud)
原因既简单又微妙:C函数不能声明为返回数组.
当你返回一个指针时,如下所示:
char *foo(void)
{
char x[] = "hello";
return x;
}
Run Code Online (Sandbox Code Playgroud)
该return x;是不实际的返回x.它返回一个指向第一个元素x1的指针- 它与说法完全相同:
return &x[0];
Run Code Online (Sandbox Code Playgroud)
应该更清楚为什么这不正确 - 这与此完全相同:
int *foo(void)
{
int x = 100;
return &x;
}
Run Code Online (Sandbox Code Playgroud)
但是,可以从函数返回结构 - 所以只要它包含在一个数组中就可以返回一个数组struct.以下是相当不错的:
struct xyzzy {
char x[10];
};
struct xyzzy foo(void)
{
struct xyzzy x = { "hello" };
return x;
}
Run Code Online (Sandbox Code Playgroud)
&或sizeof运算符的主题,则它将计算指向其第一个元素的指针.试图在C中确定一个实际的阵列有点像试图抓住你手中的雾 - 它只是消失了,取而代之的是一个指针.