结构体作为函数参数值传递的问题
发布网友
发布时间:2022-05-08 08:08
我来回答
共2个回答
热心网友
时间:2024-01-21 05:47
传结构体地址与传结构体指针二者都可以作为传出参数,因为接受函数必须为其定义一个结构指针来接收,这样在函数内就可以修改结构体,在这点上二者没有区别。
定义结构体指针未分配地址空间就作为参数传递会,如果你想把它作为传出参数的话,
你必须这么写;
void
get(struct
student
**p);
//用p来接收
main()
{
struct
student
*a;
get(&a);
}
这样你也能得到你想要的结果。当然你需要在get()函数中用malloc()为其
动态分配内存空间。
你是想知道接收函数的结构体是如何分配的吗?
在接收函数中理论上他会在它自己的函数栈帧复制一份实参结构体拷贝,如果你传的是结构体本身!
这样你对结构体的修改不会对实参有影响。
热心网友
时间:2024-01-21 05:48
为什么动不动就什么“请举例并以汇编代码详细说明”,像我这样不太需要分数的,一点吸引力都没。好忙,自己努力一点,别上来就代码呀,举例呀,之类的。大家都要努力点才好。
关于参数传递,一个是传递结构体的指针,一个是传递结构体指针的指针,即双重指针。
任何东西,当需要在函数内修改,并且返回的时候,就用它的指针。比如一个int
a,当函数只用它,传a就好了。如果要改他,那么就要传&a,因为实参在函数退出时会销毁。
那么,结构体参数传递也是一个道理。传结构体指针,说明你要用结构体的数据,或者更改结构体变量。如果传双重指针,那么可能意味着这个参数还是个返回值,也许结构体本身并不存在,由函数区创建一个结构体,或者存在,但是函数要改变指针的指向。
呵呵,看到你的第二个问题,就更加说明我的理解对了。所以只有而重指针被分配空间,函数回去分配结构体的实际空间。这个二重指针是参数返回的一种方式,很常用。