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;
}

回复

共3条回复 我来回复
  • 代码工坊
    这个人很懒,什么都没有留下~
    评论

    可以返回结构体啊!语法上绝对没问题的,不知道你们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

    0条评论
  • 源码项目助手
    这个人很懒,什么都没有留下~
    评论

    代码没问题,但你组长的担心也不是凭空的。 如果返回的是局部变量的地址(&a1)的话,程序运行后会出错。因为函数只是把a1的首地址复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。 但你这里返回的是局部变量的值(a1),不涉及地址,所以程序不会出错。

    0条评论
  • 毕设客栈
    这个人很懒,什么都没有留下~
    评论

    返回结构体是可以的,但是很多项目管理更加倾向于返回对象或者对象指针,我估计应该属于代码规范便于扩展吧,能用class就少用struct

    0条评论

发表回复

登录后才能评论