亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 613 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號