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

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 回答

?
慕后森

f(strcut A t) 参数是一个结构体,而结构体说到底就是用户自定义的组合的变量类型。是一个变量。所以这里是按照传数值的方式进行参数传递。

f(struct STU a[])参数是一个结构体数组,数组都是按照传地址的方式进行参数传递的。

若还不能理解,就把Struct A t看成是int t 而 struct STU a[]相当于 int a[].这样应该就好懂了

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

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

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

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

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

添加回答

回复

举报

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