c,c++一个函数返回结构体到底可不可以?
课程设计
1
今天我遇到另一个问题,在我写的代码里, vs2015,c++/c 程序 有一个函数,返回一个结构体, 组长说这样是不可以的, 我还和他说我以前写的代码里有返回结构体的, 现在还运行的好好的,这么就不行了, 为此,他还发了火, 想问一下大佬们,返回一个结构体这样到底行不行? 代码简化版贴出来了:
#include
#include
#include
#include
using namespace std;#pragma warning(disable: 4996) typedef struct user_info {
char type;
char name[16];
char passwd[16];
}
INFO;
INFO get_info(char c) {
INFO a1;
a1.type = 'c';
strcpy(a1.name, "abcde");
strcpy(a1.passwd, "123456");
return a1;
}
int main() {
INFO n;
n = get_info('a');
cout << n.type << endl;
cout << n.name << endl;
cout << n.passwd << endl;
getchar();
return 1;
}
说什么你的程序能运行起来算你运气好,说什么局部变量返回会出错,我就纳闷了,返回int这样的函数
int aaa()
{
int as;
as=5;
return as;
}
难道有错吗?那么返回结构体咋就不对了?
INFO get_info(char c)
{
INFO a1;
a1.type = 'c';
strcpy(a1.name, "abcde");
strcpy(a1.passwd, "123456");
return a1;
}
-
可以返回结构体啊!语法上绝对没问题的,不知道你们leader反对的原因是什么!
#include "iostream.h" struct student { int idNumber; char name[15]; int age; char department[20]; float gpa; }; student initial(); //初始化并返回一个结构 void display(student arg); int main() { display(initial()); //输出返回的结构 return 0; } void display(student arg) { cout << "学号:" << arg.idNumber << "姓名:" << arg.name << "年龄:" << arg.age << endl << "院系:" << arg.department << "成绩:" << arg.gpa << endl; } student initial() { student s1 = { 428004, "Tomato", 20, "ComputerScience", 84.5 }; //初始化结构变量 return s1; //返回结构 }
运行结果: 学号:428004姓名:Tomato年龄:20 院系:ComputerScience成绩:84.5
-
代码没问题,但你组长的担心也不是凭空的。 如果返回的是局部变量的地址(&a1)的话,程序运行后会出错。因为函数只是把a1的首地址复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。 但你这里返回的是局部变量的值(a1),不涉及地址,所以程序不会出错。
-
返回结构体是可以的,但是很多项目管理更加倾向于返回对象或者对象指针,我估计应该属于代码规范便于扩展吧,能用class就少用struct
发表回复