1樓:匿名使用者
先弄清這個概念:地址是記憶體的地址,記憶體的這個地址裡儲存的是變數的值。
*p的意思是,接p的地址去取記憶體中儲存的數值。
p=&a後,p的值是a的地址。
q=&b,q的值是b的地址。
p,q交換後,q的值的a的地址,p的值是b的地址。
所以,*p == b, *q == a
而a, b的地址與值都沒有發生變化(變化的是p, q的值),所以a,b不變,*p,*q交換
補充一下:
p,q兩人的家裡都放著一個紙條,上面寫的是a,b兩個人的家庭住址,a,b兩人家裡也有紙條,分別寫著7,8
有一天,p與q交換了紙條。
那麼,你從q那取的是b的住址(p處取的是a的住址)*q就是到b處取出資料8,(*p就是到a處取出資料7)感覺這樣能好懂一些~
2樓:匿名使用者
a,b的地址是不會改變的,它有編譯器靜態分配,a,b的值也沒有改變,你沒有對a,b有過賦值操作。你所做的緊緊是在交換指標而言。
p,q,r裡存的是a,b的地址。而*p,*q是取指標裡的值,而不是指標本身。
如果是在c環境下,p,q,r佔得是兩個位元組的空間,和int型一樣,兩個位元組,裡面存的是指向a,b的記憶體的地址。
3樓:聖誕鯊魚
假設 &a=10;&b=20
p=&a ; // p=10;
q=&b ; // q=20;
r=p;p=q;q=r; // p=20,q=10這時,p儲存的是地址20,也就是b的地址,所以*p=b=8q儲存的是地址10,也就是a的地址,所以*q=a=7a和b的值沒有交換,交換的只是p和q裡儲存的地址
4樓:匿名使用者
很簡單,a、b的地址是常量不可能改變,只是r=p;p=q;q=r;這樣做使p、q的指向改變啦,原來p指向a、q指向b,現在p指向b、q指向a;所以*p列印的是b,*q列印的是a,是不是a、b還是老樣子!?
明白了就給個最佳答案吧!!
5樓:傲慢雪見
你交換的只是ip值,但是你並沒有改變a,b的值啊,如果你改為交換內容的話就可以實現交換a,b的值
main()
這樣你試試吧!可以實現交換a,b的值}
6樓:
p=&a;q=&b;
r=p;p=q;q=r;
你只改變了指標的指向,並沒有改變指標指向的變數的值,所以a,b不變假設:p=&a;q=&b;
r=p;p=q;q=r;
*p=7;*q=8;
這樣就改變了a,b變數得值,輸出a,b變成 8,7
7樓:匿名使用者
a 與 b是變數。其它地址不能改變,只能改變它的內容。
你的題目只是改變了p、q、 r指向的地址,但並沒有改變a ,b的值。
8樓:
由程式輸出可見:形引數組array與實引數組a佔用的是同一個空間!
在c語言中怎樣使形參值改變實參值也跟著改變
9樓:風若遠去何人留
在c裡面 是無法做到形參改變 實參值同步改變的。
只能通過傳地址的方式
即引數型別為指標
這樣 形參指向空間修改,可以使得實參指向空間同步修改,因為是同一塊記憶體區域。
另外,在c++中,可以通過引用傳參,來實現你說的目的。
10樓:匿名使用者
在c語言中,通過指標傳遞,可以在自定義函式操作其他函式內的變數值。
把實參的地址傳給形參,這樣形參得到地址間接訪問實參本身。
c++裡還可以按引用傳遞,把「實參本身引用過去」可能更好理解,引用內部實現也是指標
11樓:夢想作坊
利用返回值,或者是指標。
c語言說形參不能改變實參的值,為什麼這個賦值語句可以
12樓:匿名使用者
因為是在傳地址,值傳遞時候就不能改變實慘值了
13樓:匿名使用者
cpystr函式中的形參是字元指標,而字元指標並沒有改變,只是字元指標指向的記憶體空間的值發生改變。
14樓:
因為你的引數傳遞的是指標,那麼這個引數就是實參 不是你所說的形參。
15樓:匿名使用者
它改變的時*p1,而不是p1自己。 *p1和p1不是一個東西
16樓:
你這個引數用的都是地址(指標)在傳值,當然可以。首先p2指的是b的首地址,然後傳入的兩個引數都是指標,指向的是地址,最後將p1指向的地址裡的值依次賦給p2指向的地址裡的值,所以最終b就有了新值china;
你看看這個,獲取可以幫你理解這個問題:
#include "stdio.h"
void cpystr(char p1,char p2)void main()
17樓:匿名使用者
說的是普通傳參、、你這傳的是指標當然 能改變 了
18樓:
由程式輸出可見:形引數組array與實引數組a佔用的是同一個空間!
19樓:匿名使用者
形參和實參的區別
形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。
實參出現在主調函式中,進入被調函式後,實參變數也不能使用。
形參和實參的功能是作資料傳送。發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。
1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時, 即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。 函式呼叫結束返回主調函式後則不能再使用該形參變數。
2.實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
3.實參和形參在數量上,型別上,順序上應嚴格一致, 否則會發生「型別不匹配」的錯誤。
4.函式呼叫中發生的資料傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。
5.當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製一份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。
c語言裡形參的值到底什麼情況下才會影響到實參
20樓:熟悉的陌生
這道題的fun函式是將兩個指標的值交換,但並沒有影響指標內部的值,只是將指標所指的位置改變,同時也將兩條語句的位置改變,所以如果取出指標內部的值的時候,仍不變。
21樓:匿名使用者
因為你在函式中交換的是a和b兩個int*的副本,你需要達到的目的是交換a,b指向區域的內容,改為
void fun(int *a, int *b)
22樓:匿名使用者
這裡實參自然不會變化,你這麼理解,實參是實際參與到函式計算中的引數,但你這裡函式的返回值中,並不包含輸入實參的變化,固實參是無變化的。簡單說,該函式fun是將兩輸入引數進行互換的操作,但是整個互換操作是在單獨的記憶體空間中完成的,最終函式並沒有對輸入引數的地址對應的資料進行更改,所以你可以認為是虛的跑了一遍計算,最終什麼都沒改變。
23樓:愛擼斯坦
若形參是指標形式,或引用形式,則會影響實參。
兩者歸根結底都是在對實參進行操作。
c語言的,這個程式如何改啊?如何才能使ch1 ch2的值交換?這個為什麼在幫解釋下什麼是實參,和形參。謝謝
24樓:看灰過來了
形參和實參是完全不同的儲存空間,形參發生改變,並不會影響實參,所以要想通過函式呼叫來改變實參的值,需要用地址來做實參,這樣,形參也需要改成指標才行。
修改之後的如下:
#include
int main()
void swap(char * x,char *y) //此處修改
25樓:
實參就是實際的數,比如你要計算身高,在主函式你宣告一個變數int main()
這個就叫實參,它就是你的資料。
型參就不同了,比如你想要寫一個函式,來計算你站在凳子上有多高,你就可以這麼寫
int fun(int a,int b)
看到沒,不管你傳什麼進來,在函式裡,我就把第一個引數叫做a,第二個引數叫做b,計算之後就返回結果。行參就是我函式要做的事情,和你這個數本身表示什麼沒有關係。
而且你如果要改變身高的值,你傳個值進來是沒有用的,你得傳地址進來才行。因為你傳值進來,只是讓函式使用這個值,但並不改變它。
c語言中的基本資料型別作為實參時,它和對應的形參之間資料傳遞方式為數值傳遞?形參值改變影不影響實參
26樓:房子a房子
對,c語言函式呼叫過程中的引數傳遞過程是值傳遞過程,形參在函式執行完畢後即被銷燬,實參的值不會被改變。若想使用函式修改實參的值,可以使用指標或者引用的方式宣告函式引數
27樓:
由實參傳給形參,再由形參傳回給實參
地址傳遞
單向值傳遞
由使用者指定傳遞方式
c語言中實參與形參有怎樣的對應關係?
28樓:梅園寨主
#include
void function(int* pia)
int main(void)
怎樣定義C語言函式中的引數 實參 形參
int fun int x,int y x,y就是 du形zhi 參dao main include void add int x,int y 定義函式時候,函自數的參bai數就是形參,void main c語言中什麼是形參,什麼是實參?形參 全稱為 形式引數 是在定義函式名和函式體的時候使用的引數...
求c語言高手解釋形參sqlistlsqlistl的區別
這個定義應該是c 裡面的引用的定義。因為c裡面 只是一個取地址的符號。而且c裡面不會在生命的時候去去一個變數的地址 sqlist l 是宣告一個指標 sqlist l 是宣告一個引用 指標與引用的區別在於 1 引用總是指向一個物件,沒有所謂的 null reference 所有當有可能指向一個物件也...
形參與實參的區別怎麼區分呢,vb中形參和實參的區別
通過形參與實參在函式中位置來進行區分,兩者區別如下 一 主體不同 1 實參 在呼叫有參函式時,函式名後面括號中的引數為 實際引數 2 形參 不是實際存在變數,又稱虛擬變數。二 目的不同 1 實參 可以是常量 變數或表示式,無論實參是何種型別的量,在進行函式呼叫時,都必須具有確定的值,以便把這些值傳送...