c语言返回结构体,c语言返回结构体指针

dfnjsfkhak 14 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言返回结构体的问题,于是小编就整理了3个相关介绍c语言返回结构体的解答,让我们一起看看吧。

  1. C语言中,return语句怎么样返回一个数组?
  2. 局部变量会在栈内存销毁后消失,为什么可以返回结构体指针或临时对象呢?
  3. golang怎么返回结构体?

C语言中return语句怎么样返回一个数组

首先,C/C++只能返回数组的指针而不能返回整个数组。即使返回数组的指针,但如果函数中的数组是自动性质,那将是危险的。这是比较正宗的表述。

如果确实需要从函数中返回自动性质的数组的全部元素值,有没有办法呢?

c语言返回结构体,c语言返回结构体指针-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

有。由于C/C++是允许返回结构体的,可以定义一个结构体模板,把数组作为成员安排在其中,函数中临时声明结构体变量操作其中的数组;完毕后返回结构体变量,在主调函数中用同类型的结构体变量接收就可间接实现“返回一个数组”。

举例代码如下运行结果如下:

局部变量会在栈内存销毁后消失,为什么可以返回结构体指针或临时对象呢?

因为函数的返回值并不会放在内存中,更不会当到栈中,而是放到了CPU内部的通用寄存器里面,具体是放在哪个寄存器,就要看那个CPU的架构了,X86的话,是放在了eax寄存器和edx寄存器中。

c语言返回结构体,c语言返回结构体指针-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

这样做90%是错误的。

1.指针是一个内存地址,当函数运行完毕就会释放局部变量,这个指针指向的地址就会出错,函数外面再访问这个地址就会出错。

2.结构。当函数返回会将局部变量赋值给你函数外的变量,然后就释放这个局部变量。例如std::string。

c语言返回结构体,c语言返回结构体指针-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

std::string test(){

std::string a=“abc”; //局部变量a

return a;}

void main(){

std::string b = test(); //变量b,函数返回时会将局部变量a赋值给b

printf(b.c_str()); //这里访问不会出错

golang怎么返回结构体?

可以直接返回结构体,也可以用指针(或者引用):

structabc{

inta;

intb;

charc;

}

voidfun(structabc&st)//通过引用改变实参

{

st.a=5;

}

到此,以上就是小编对于c语言返回结构体的问题就介绍到这了,希望介绍关于c语言返回结构体的3点解答对大家有用

标签: 返回 变量 数组