结构体作为函数参数值传递的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体作为函数参数值传递的问题相关的知识,希望对你有一定的参考价值。

参考技术A 传结构体地址与传结构体指针二者都可以作为传出参数,因为接受函数必须为其定义一个结构指针来接收,这样在函数内就可以修改结构体,在这点上二者没有区别。
定义结构体指针未分配地址空间就作为参数传递会,如果你想把它作为传出参数的话,
你必须这么写;
void
get(struct
student
**p);
//用p来接收
main()

struct
student
*a;
get(&a);

这样你也能得到你想要的结果。当然你需要在get()函数中用malloc()为其
动态分配内存空间。
你是想知道接收函数的结构体是如何分配的吗?
在接收函数中理论上他会在它自己的函数栈帧复制一份实参结构体拷贝,如果你传的是结构体本身!
这样你对结构体的修改不会对实参有影响。
参考技术B 为什么动不动就什么“请举例并以汇编代码详细说明”,像我这样不太需要分数的,一点吸引力都没。好忙,自己努力一点,别上来就代码呀,举例呀,之类的。大家都要努力点才好。
关于参数传递,一个是传递结构体的指针,一个是传递结构体指针的指针,即双重指针。
任何东西,当需要在函数内修改,并且返回的时候,就用它的指针。比如一个int
a,当函数只用它,传a就好了。如果要改他,那么就要传&a,因为实参在函数退出时会销毁。
那么,结构体参数传递也是一个道理。传结构体指针,说明你要用结构体的数据,或者更改结构体变量。如果传双重指针,那么可能意味着这个参数还是个返回值,也许结构体本身并不存在,由函数区创建一个结构体,或者存在,但是函数要改变指针的指向。
呵呵,看到你的第二个问题,就更加说明我的理解对了。所以只有而重指针被分配空间,函数回去分配结构体的实际空间。这个二重指针是参数返回的一种方式,很常用。

C语言中,结构体作为函数参数传递,详解?

1.可以把结构体作为参数啊,
2.不去取地址的意思,是引用的意思,函数执行时修改L的值,就直接的修改了实参的值,相当于地址传递了。
3.真正调用的时,如下:
SqList
tempStruct;
InitList_Sq(tempStruct)
这样就可以了。
呵呵
参考技术A 结构体也是一个对象,和系统内置的int long 等定义的对象并没有区别的.同样遵守传值和传址两种情况,建议你看一下有关C++类的复制和构造和析构.浅层复制和深层复制.
在这里一时说不清楚.不过可以简单的告诉你,结构体在传递的时候尽量使用址传递,如果使用值传递的话结构体内如果有指针或引用等成员都存在一个深层复制的问题.本回答被提问者和网友采纳
参考技术B 什么情况?

以上是关于结构体作为函数参数值传递的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将不同类型的结构体作为一个函数的参数?

QT怎样将一个结构体作为函数参数从C++传递到QML

C语言 结构体作为函数的参数

go语言切片作为函数参数的研究

结构体指针与结构体变量用作函数参数时有啥区别,在用法上

嵌入式开发——结构体指针作为参数传递变量的值不正确