函數一(傳址調用)#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 關注
- 613 瀏覽
添加回答
舉報
0/150
提交
取消