我知道在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; } 问题来源于stack overflow
提出相同问题的一种更好的方法是“数组有什么特别之处”,因为是数组具有附加的特殊处理,而不是structs。
通过指针传递和返回数组的行为可以追溯到C的原始实现。数组“衰减”到指针,引起了很多混乱,尤其是在刚接触该语言的人们中。另一方面,结构的行为类似于内置类型,例如ints,doubles等。这包括嵌入在中的任何数组struct,但灵活的数组成员除外,这些数组不会被复制。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。