1樓:匿名使用者
注意你的程式,是用指標作為形參。
也就是說當你呼叫prt(&a,&b,&c);的時候,系統會在prt函式執行中,定義三個區域性變數,int *x,int *y,int*z,這三個指標分別指向你傳入的a,b,c。
當你對這三個指標所指向的值做改變的時候,也就是對abc做了改變,這個也就是所謂的傳遞地址。
但是請注意,你使用指標z可以來改變c的值,但是指標z裡面存放的僅僅是c的地址,而且是一個函式prt裡面的區域性變數,你改變z的值之後,只能使其不再指向c,而沒有其他任何作用,實際你對z++後取值都是非法的,只不過編譯器裡面沒有給予你警告。
原理我上面說明白了,而正是因為是區域性變數,prt函式執行完之後,那些區域性變數也都沒有了,所以你呼叫100次z的值都不會改變的,因為你改變的不是指向的量,而是區域性變數本身。
明白了不,多看幾遍
2樓:
你的不是傳址方式傳遞引數
第一次和第二次都沒有修改c的地址
#include
int a=10,c=20,b=40;
void prt(int *x,int *y,int*z)// c的地址傳遞給z,z的地址與c的地址在記憶體中是2個不同的地址,z++對c沒有任何影響
void main()
請教C語言程式設計模擬考題問題。
1.注意區分一下 define s 2 3 和 define s 2 3 在這個程式中,define s 2 3 所以s 4 2 3 4 14 如果是 define s 2 3 那麼 s 4 2 3 4 20 對於巨集定義,只要原樣將他帶入計算就可以了,不要主觀的加括號2.對於無符號數s來說,s和s...
求高手指教c語言函式怎麼返回結構體
include stdio.h struct abc void main void struct abc x y y myabc printf d d p n d d p n x.a,x.b,x.p,y.a,y.b,y.p include include include struct people ...
請教一下C語言的問題
當要求使用volatile 宣告的變數的值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。而且讀取的資料立刻被儲存。通俗的說,就是時刻更新的意思。編譯系統可能會優化程式,常用的變數放在cpu的暫存器裡運算。這時如果你去記憶體中尋找這個變數的話,它可能是個意料之外的...