函数一(传址调用)#include<stdio.h>struct STU{char name[9];char sex;int score[2];};void f(struct STU a[]){struct STU b={"Zhao",'m',85,90};a[1]=b;}main(){struct STU c[2]={{"Qian",'f',95,92},{"Sun",'m',98,99}};f(c);printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);}输出结果是Qian,f,95,92,Zhao,m,85,90(f函数有作用)函数二(传值调用)#include<stdio.h>#include<string.h>struct A{int a;char b[10];double c;};void f(strcut A t);main(){struct A a={1001,"ZhangDa",1908.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}void f(struct A t){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}输出结果是1001,ZhangDa,1098.0(f函数无作用)初学者表示已经要崩溃了,求大神解答简单点!不然我听不懂!
2 回答
慕后森
TA贡献1802条经验 获得超5个赞
f(strcut A t) 参数是一个结构体,而结构体说到底就是用户自定义的组合的变量类型。是一个变量。所以这里是按照传数值的方式进行参数传递。
f(struct STU a[])参数是一个结构体数组,数组都是按照传地址的方式进行参数传递的。
若还不能理解,就把Struct A t看成是int t 而 struct STU a[]相当于 int a[].这样应该就好懂了
关于传递参数类型,首先要看函数的定义。不要去看函数的调用。
撒科打诨
TA贡献1934条经验 获得超2个赞
第二个程序传入的t是主函数中a的一个副本(也就是所谓的值传递,传入到子函数中的是a的值),所以,t的变化与a无关
而
第一个程序中传入的a是个数组名,也就是是个地址,a【1】=b就是将b中的数据存入了a地址中,所以,能通过a带回到主程序中。
- 2 回答
- 0 关注
- 585 浏览
添加回答
举报
0/150
提交
取消