为了账号安全,请及时绑定邮箱和手机立即绑定

C语言:为什么第一个函数是传址调用第二个函数是传值调用?并没有看出它们的调用方式有哪些区别?

C语言:为什么第一个函数是传址调用第二个函数是传值调用?并没有看出它们的调用方式有哪些区别?

JVM
智慧大石 2019-02-04 10:06:24
函数一(传址调用)#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[].这样应该就好懂了

关于传递参数类型,首先要看函数的定义。不要去看函数的调用。

查看完整回答
反对 回复 2019-03-18
?
撒科打诨

TA贡献1934条经验 获得超2个赞

第二个程序传入的t是主函数中a的一个副本(也就是所谓的值传递,传入到子函数中的是a的值),所以,t的变化与a无关

第一个程序中传入的a是个数组名,也就是是个地址,a【1】=b就是将b中的数据存入了a地址中,所以,能通过a带回到主程序中。

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 539 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信