然后定义了一个名为 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),结构体本身并未发生变化,只是副本被改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)