【发布时间】:2014-05-02 11:18:20
【问题描述】:
我想知道是否可以在 C++ 中传递/返回保存静态分配数组的结构。例如:
typedef struct t{
char name[32];
int id;
}t;
t foo(char name[]){
t my_t = {name, 0};
return my_t;
}
int main(){
t main_t = foo("a struct");
printf("%s", main_t.name); //is this safe to access?
return 0;
}
当它按值返回结构时,我猜它不会复制数组名称,只复制指向它的指针。
编辑:只是为了澄清一些事情。我知道char *var 等于函数参数中的char var[]。我很快就编写了这段代码,甚至没有对其进行测试。我知道它绝对不是世界上最好的代码,我不会建议任何人在现实生活中使用它。
理想情况下,我会动态分配结构并传递指针,但是,我正在教一个人用 C/C++ 编程。这是一个不需要人知道动态分配或指针的国家考试,这就是为什么*根本没有真正使用。
问题实际上是关于是否可以返回一个包含静态分配数组的结构。
我们可以改用这段代码吗:
#include <iostream>
struct t{
char name[32];
int id;
};
t foo(int id){
t my_t;
my_t.id = id;
for(char i = 0; i < 31; i++){
my_t.name[i] = 'a';
}
my_t.name[31] = '\0';
return my_t;
}
int main(){
t main_t = foo(0);
std::cout << main_t.name; //is this safe to access?
return 0;
}
【问题讨论】:
-
这不应该编译,因为您试图在此处将
char*分配给char[]t my_t = {name, 0}。 -
在大多数情况下混合使用 C 和 C++ 并不是一个好主意。例如,C++ 答案可能会定义复制构造函数和复制赋值,而 C 答案可能会引入克隆方法。
-
foo(char name[])没用。基本上它是一个没有任何大小的foo(char*) -
@MrSpreadsheet 哪种语言 c 或 c++?