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 }
C語言程式設計題 編寫函式,用於求兩個數中的較小數用主函式
int min int a,int b return a 如下 include int comp int a,int b int main void 用c語言編寫 編寫一個函式,要求在主函式中輸入兩個數,輸出其中最大值。比較兩個數的大小可以使用三目運算子 三目運算子 表示式1 表示式2 表示式3 其...
求一道簡單的c例題定義兩個陣列利用函式給兩陣列賦值最後交換倆函式的值
include stdio.h 標頭檔案 void swap int p,int k 自定義函式交換兩個數的位置 void main include stdafx.h include stdio.h void fun int x 4 int y 4 void main for i 0 i 4 i v...
用c語言寫輸入兩個整數ab程式設計求解a的b次冪的
include include include include include include include using namespace std string highit string a,string b c for int i n m 1 i 0 i result.insert 0,1,...