C语言问题结构体变量

C语言问题结构体变量,第1张

程序首先定义了一个名为 struct S 的结构体类型,包含一尘激枯个整形变量n,一个整形数组,整形变量可用来标记数组的长度。

然后定义了一个名为 f 的函数,该函数定义了一个指针p作为形参,指针类型为struct S,函数完成的功能是排序。

主函数部分先定义了一个struct S类型的变量,名为 s,并初始化。然后调用函数 f,将变量 s的地址传给指针p,则 p 指向结构体变量 s,在函数 f 中,第一曾循环,p->n-1 应理解为(p->n)-1,因为p指向变量s,因此p->n即是取结构体变量s中的变量 n,从主程序铅岁中可见n被初始化为10,所以p->n-1值为9,第二层循环是依次取结构体变量s中数组a的两个相邻成员,比较两者大小并交换,最终完派洞成从小到大排序的功能。主函数中的for循环是将s中的数组a输出(已被函数f排序过了)

这两者作为函数参数,还是有很大的区别的,我说说自己的理解。

如:

typedef

struct

A{int

a...}A

//定义结构体A

void

Func(A

a)

//通过结构体变量传参

void

Func(A*

pA)

//通过结构体指针传参

调用函数时,因为函数参数要临时存放到栈中吵哪茄,若结构体变量作为参数,则需要生成一个结构体A的副本,将其存放到栈中

而结构体指针升察作为变量,只需将指针pA存放到栈中即可,提高了程序的空间效率。

其次,结构体指针作为函数参数:

可以在函数中通过该指针引用结构体,当在函数中修改了结构体的成员变量后(如:pA->a

=

0),指针pA所指向的结构体本身缓缓也被改变了。

不同的是,当结构体变量作为函数参数:

在函数中可通过变量直接使用结构体,但要注意的是,如果在函数中修改了结构体的成员变量后(如:

a.a

=

0),结构体本身并未发生变化,只是副本被改变。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12497657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存