我知道在C中我们不能从函数返回一个数组,而是一个指向数组的指针.但我想知道什么是特殊的东西structs使它们可以通过函数返回,即使它们可能包含数组.
为什么struct包装使以下程序有效?
#include <stdio.h>
struct data {
char buf[256];
};
struct data Foo(const char *buf);
int main(void)
{
struct data obj;
obj = Foo("This is a sentence.");
printf("%s\n", obj.buf);
return 0;
}
struct data Foo(const char *buf)
{
struct data X;
strcpy(X.buf, buf);
return X;
}
Run Code Online (Sandbox Code Playgroud) 显然,我们可以将复杂的类实例传递给函数,但为什么我们不能将数组传递给函数呢?
[这是一个受到其他地方最近讨论的启发的问题,我会用它来提供答案.]
我想知道数组"衰减"指针的奇怪C现象,例如当用作函数参数时.这似乎是不安全的.用它明确地传递长度也是不方便的.我可以通过其他类型的聚合 - 结构 - 完全符合价值; 结构不会腐烂.
这个设计决定背后的理由是什么?它如何与语言集成?为什么结构有区别?