1樓:娛樂小八卦啊
運用**解釋指標運用的理解如下:
#include
using namespace std;
int fun1 (int a,int b)
int c;
c=a;a=b;b=c;
cout<<"a1:" int *c; c=a;a=b;b=c; cout<<"a2:"<<*a<<";b2:"<<*b int *c; c=*a;*a=*b;*b=c; cout<<"a3:"<<*a<<";b3:"<<*b int c; c=*a;*a=*b;*b=c; cout<<"a4:"<<*a<<";b4:"<<*b int c; c=a;a=b;b=c; cout<<"a5:" int aa=1,bb=2; fun1(aa,bb); cout<<"aa1:" cout<<"aa2:" cout<<"aa3:" cout<<"aa4:" fun5(aa,bb); cout<<"aa5:" 輸出結果為: a1:2;b1:1 aa1:1;bb1:2 a2:2;b2:1 aa2:1;bb2:2 aa3:1;bb3:2 a4:2;b4:1 aa4:2;bb4:1 a5:2;b5:1 aa5:2;bb5:1 main中呼叫fun1()時,將實參a,b的值傳遞給了交換函式,如果此時在swap1中列印,可以看到結果是正確的,但是該過程其實是將aa和bb分別複製了一份給了函式,執行完fun1()之後,aa和bb的值沒有任何變化。 fun2(),看似的確使用了指標,但還是失敗,因為這裡是將aa和bb的地址給交換了,而並沒有交換aa和bb的值。在這裡由於未給c賦值,c中並沒有確定的值,c中的值是不可預見的。此時c可能指向一個未知的儲存單元。 而嚴重的情況是,該單元的資料可能是有用的,因此fun2()不但沒有實現兩個數的交換,反而給系統的穩定性帶來威脅。 fun3(),將int賦值給int *,編譯錯誤。 fun4()是正確的。為了在函式中改變了的變數能被其它函式呼叫,正確的辦法是用指標變數作為函式引數,在函式執行過程中使指標變數所指向的變數值發生變化。 函式呼叫結束後,哲別變數值的變化依然保留下來,這樣就實現了通過函式呼叫是變數的值發生變化,在其它函式中可以使用這些改變了的值的目的。 fun5()也是正確的,這是引用的重要應用之一。對於引用的操作實際上是作用在引用所因的物件上。 擴充套件資料 在函式中的引數,並不是呼叫者的變數,而是臨時申請的變數a和b存放main函式中變數a和b的值,並在函式中用來計算,在fun中給a和b賦值都是在操作這兩個臨時申請的變數,函式返回後,這兩個變數被捨棄,函式呼叫也沒有將這兩個臨時變數的值返回給main函式中呼叫使用的引數功能。 所以,在函式中要操作呼叫者申請的變數,需要給出它們的指標,函式中用指標來找到這些變數的位置和內容。 2樓:匿名使用者 void swap(int *xx,int *yy)上面這種才可以。 你的兩個方法中,第一種方法,雖然引數是指標,但是作為引數的指標也還是臨時複製的,你在方法裡互換操作的是臨時指標而不是指標指向的內容 第二種方法,引數是兩個int變數,但作為引數這兩個變數只是臨時複製了一份,操作這兩個複製的臨時值並不能改變本體。 3樓: c語言轉換變數的值,並不是直接轉換,而是通過反覆賦值進行值的覆蓋;有三種轉換方式,傳值,傳址,傳引用。如果不用指標,將b值符給a後,a,b的值是一樣的,a值的儲存地址不變,輸出時還是a值;而用指標後,通過指標指向地址,可進行地址層面的轉換,輸出電腦以為的a時,其實是b的地址上的b值才將兩個變數的值完全交換,此為傳址轉換。 4樓: 因為給函式引數分配的空間是臨時的 用完就被**了。 c語言中如何交換兩個指標變數的的值 5樓:小小歐平兒 1、首先,就是最基本的知識,寫標頭檔案、函式宣告、定義變數。 2、下面還需要定義指標,需要定義兩個指標p1和p2,然後把a的地址賦值給p1,把b的地址賦值給p2。 3、然後就是呼叫函式,該函式沒有返回值,就直接呼叫,但是引數進入的是a和b的地址,而不是a和b。 4、函式點用完之後,就是輸出a和b的值看一看是否互換了。 5、首先,a和b的地址傳給x和y,通過指標直接對a和b的值進行操作。 6、最後,就是調換*x和*y的值,這樣就是實現了a和b的值。 6樓:匿名使用者 交換兩個指標變數的的值有兩種不同的形式: 在指標定義所在函式交換兩個指標變數的值 這種交換,與交換兩個整型變數的值方法相同,分三步: 先將pa儲存到臨時變數pt中, 再將pb儲存到pa中, 最後將pt儲存到pb中 通過自定義函式進行交換兩個指標變數的值 這種交換,必須要傳遞兩個指標變數的地址到自定義函式中(即函式的形參是二維指標),然後在函式中對收到的二維指標變數中的內容進行交換,即可實現實參的交換。 7樓:匿名使用者 定義一箇中間變數t(也是結構體型別的): t=p1; p1=p2; p2=t;就行了 8樓:匿名使用者 定義一個指標變數temp,*temp=*p1;*p1=*p2;*p2=*temp; 9樓:匿名使用者 #include struct student ;void main() 10樓: int a, b; int *p1=&a,*p2=&b,*temp; temp=p1; p1=p2;p2=temp; 這樣就完成交換 11樓: 4 int main(void) 5 add; 11 12 int *p; 13 int *q; 14 15 add.data = 1; 16 add.id =2; 17 p = &add.data; 18 q = &add.id; 19 printf("before turn p = %d q = %d\n",*p,*q); 20 p = &add.id; 21 q = &add.data; 22 printf("after turn p = %d q = %d\n",*p,*q); 23 24 return 0; 25 } 因為在swap函式中,a b是x y的資料複製品,其變化與x y本身無關,如果要交換,需要傳遞x y的位址到子函式中,進行交換!1 include 2 void swap int a int b 3 10 int main 11 因為在swap函式中,a b的位址和x y的位址不同,其變化與x y本... 你在console中的輸 入一定bai是 8,9 回車du 這是錯誤的,正確的輸入如zhi下 8 9 回車 原因dao是內你格式化字串時,容用的是scanf d d a,b 兩個 d中間沒逗號,你輸入個逗號肯定就錯了,這樣的話,b的值是個負數,所以你看到輸出結果為8 你的 是對的啊,注意輸入兩個數的... include double calc int a,int b void main c語言,編寫乙個程式從鍵盤上輸入兩個整數,並求出兩個數的平均值在螢幕上輸出結果 c語言實現 include int main c語言程式設計.由鍵盤輸入兩個整數,分別計算這兩個數的和 差 積 商,並輸出結果。具體輸入...C語言,這樣為什麼不可以實現兩個數值的交換
關於c語言求較大數的問題,c語言中兩個數中取較大的乙個數怎麼表示
用C語言程式設計實現 輸入整數,求出這兩個數的平均值並列印輸出到螢幕。要求使用自定義函式並呼叫