C語言交換函式怎麼沒有用啊,C語言中交換兩個數利用函式的呼叫為什麼不行了。

2022-07-20 16:20:02 字數 5405 閱讀 8325

1樓:匿名使用者

c的函式呼叫為值傳遞的,形參是實參的副本,副本做任何改變,原本的實參都不會受影響

想改變main裡的ab變數應該使用指標

沒理解上面的話的話,看看下鏈的解釋,或者自己debug一下

2樓:匿名使用者

因為你的 swap 函式中沒有返回值,swap 函式修改**如下:

int swap( int a, int b)

3樓:匿名使用者

函式應該是接受指標的。。。

c語言中交換兩個數利用函式的呼叫為什麼不行了。

4樓:匿名使用者

你的交換函式中的變數只在交換函式中有效,所以沒辦法影響函式外的變數,應該傳指標

5樓:夢舒十六

因為你的變數的交換是在函式中進行的對於main函式沒有結果的反饋x,y沒有動過所以不會有變化

c語言中有沒有用於計時的函式?怎麼用?

c語言中函式呼叫,為什麼交換了位址,可是所指的值還是不變那????

6樓:匿名使用者

#include

void swap(int *a,int *b)

int t=0;

t=*a;

*a=*b;

*b=t;

int main()

int x=3,y=5;

int *p=&x,*q=&y;

swap(p,q);

printf("%d %d\n",*p,*q);

printf("%d %d\n,a,b);  //看看是不是 a,b也改變了!~!

你那個錯誤,我的估計: 你可以用vc++單步調式一下.也可以完全理解的.

p=&x  就是把  x的位址儲存在 指標 p中.  *p 就是得到  值. *p=3.

q也差不多.

你下面  sqap(p,q) . 就是把位址傳過去了.

可是傳回來的值沒有改變,為什麼呢!

原因很簡單.

因為你的

int *t;

int*t;

t=a;a=b;b=t;

交換的是  a和b 的位址.

不要忘記了,當呼叫乙個函式時.

os會為  swap 函式中的  int *a,int *b.開闢記憶體.

你改變的是swap開闢的記憶體.並沒有改變 main中的*p和*q記憶體區域.

我再說清楚點.

p 儲存的是 &a    q儲存的是  &b

swap函式   a 儲存的也是 &a    b儲存的也是&b

你用交換了 a和b的 位址.有什麼用.沒有改變原來的地方的位址.

只是改變了你自己的 a 和 b裡面的位址.   沒有改變那邊的 真正的  3 和 5.

如果用了

int t;

t=*a;

*a=*b;

*b=t;

就是間接去改變那邊的值.

通過裡面 &a,&b,的位址來找到  真是的 3,5  然後就改變了.

7樓:

你對函式呼叫和引數傳遞還不是很理解

1.首先函式呼叫的引數有形參和實參之分

swap(p,q);//p q為實參

void swap(int*a,int*b)//a b為形參

2.指標變數名表示的是變數的值,這個值是其他變數的位址,而不是指標變數本身所在記憶體空間的位址

如:int a;//定義整型變數,假設其位址為0xaaaaaaaa

int *p;//定義乙個指標變數p,肯定要為其分配記憶體,假設為0xffffffff,還沒初始化,裡面的資料是不確定的。

p=&a;//p表示的0xffffffff裡面的資料,是a的位址,執行後0xffffffff裡面的資料變成a的位址,即0xaaaaaaaa

*p=5;//往a裡寫入資料

3.形參跟實參是不同的變數,佔用不同的記憶體空間

所以a b已經是兩個跟p q不同的變數了。

只不過是值跟他們相等罷了。

就如int m,n;

m=n; 你能說m和n是同個變數麼?

4.既然形參和實參是不同的變數,

t=a;a=b;b=t;

交換a b的值(交換儲存在a b指標變數裡的資料,這個資料是位址,變成a跟q指向同乙個物件,b q指向同乙個物件)不會影響到p q的值

int t;

t=*a;*a=*b;*b=t;//交換a b指標變數裡的位址所指向的資料,這樣才能交換。

8樓:軍軍

你的程式是值傳遞方式,形參的改變不影響實參,即a、b值改變了但p、q的值並未變化。

9樓:匿名使用者

*p是乙個不定的值,這個是將x的位址交給了p所指的值,*q也是乙個不定的值,將y的位址交給我q所指的值。交換的只是p和q和位址,它們所指的值還是沒有變的啊

10樓:心千言

你呼叫子函式了,但是子函式沒有返回值,呼叫完就沒了,對主函式沒影響的

11樓:匿名使用者

完全不是那麼回事!!

你函式裡面應該是交換位址所指的內容,位址本身是個型參,你這樣做結果就跟你傳值是一樣的效果了

這樣改吧

void swap(int*a,int*b)如果你要修改指標 則應該傳入指標的位址 如下:

12樓:

*t=*a; *a=*b; *b=*t;

任何引數都是傳值 你那麼寫 區域性指標的位址交換了 但是不影響main裡的指標

13樓:

這說明你對函式呼叫,形參和實參這塊還是沒掌握好,函式呼叫只是你p,q作為形參傳了過去,也就是a,b首先得到了p,q位址,然後a,b位址交換。但是p,q本身沒變,這樣你主函式裡呼叫沒有返回值的swap()函式,結果讓輸出p,q當然沒變化了,

可以這樣修改:你把位址交換過程在主函式裡實現,不呼叫。這樣不需返回值直接能交換p,q。或是像一樓那樣改的,在裡面實現數值重新複製也行。

14樓:

main函式中

指標變數 p的值是 變數x的位址 ,即p指向x指標變數 q的值是 變數y的位址 ,即q指向ymain函式 呼叫swap函式傳入的引數 是 p 和q ,是以傳遞值的方式呼叫的

swap函式的形參 a和 b也是 指標變數 ,呼叫 是a的值等於 p的值 ,b的值等於 q的值即 a 指向main函式中的變數x

b 指向main函式中的變數y

swap函式 交換 a 與b的值

交換前 a指向x,b指向y;交換 後 a就指向了y,而b指向了xa b的交換 並沒有 改變 main函式中 p 和q的指向!

改為#include

void swap(int **a,int **b) //形參改為指向指標的指標

main()

15樓:匿名使用者

發生改變的只是a b的位址。。。

c語言寫的交換兩個數的函式不起作用,**有問題 10

16樓:

這種形參是值傳遞

而不是引用傳遞

所以實際上沒有改變到外部的實參的值

你要傳位址進去才行 exchange(int *a,int *b) 裡面a,b都得改成*a,*b

呼叫是exchange(&a,&b);

17樓:快樂不再悲傷

exchange(a,b) 改成 exchange(&a,&b);

void exchange(int a,int b) 改成 void exchange(int * a,int * b)

要把位址傳進去才能改變 ab的值,這個牽扯到了指標的問題,你可以去學習一下

18樓:匿名使用者

#include

#include

void exchange(int *a,int *b) //交換a,b

exchange(&a, &b);

c語言初級 我定義乙個交換函式為什麼沒出想要的結果,

19樓:海南特產大全

如果你要在被調函式裡修改主調函式的值,必須傳送位址,要不然是沒法修改的!

例子:# include

void change(int * a,int * b); //函式前置宣告

int main(void)

void change(int * a,int * b)這樣就對了,值就可以互換了!希望幫助到你,很久沒鼓搗了,呵呵!

20樓:哭泣的惡魔

用引用吧

void change(int &a,int &b)

c語言問題,兩個函式程式為什麼第乙個有交換效果,第二個卻沒有,請大神幫忙解答

21樓:去你嗎的高考彪

第乙個是傳值,在計算機會重新開闢內存在儲存區域性變數,也就意味著在記憶體裡會有兩套數字,函式裡交換的是新開闢的,而原來的值不會交換!!!第二個傳的僅僅是位址,在記憶體裡只有一套數字,所以交換的就是真身

c語言中用於交換值函式問題

22樓:

因為void gsd(int a,int b)中的a和b在呼叫時用實參的值進行拷貝,在函式中交換的只是拷貝過來的副本,所以原來的實參值並沒有發生交換操作。而在void gsd(int &a,int &b)中int &型別使a和b的性質發生了變數,它們是「引用變數」,呼叫時它們就成了實參的「別名」——就是說在函式中操作的是實參本身,所以結果實參發生了交換變化——int &等型別是c++引入的新型別,c是沒有的。要搞清楚的是int &是「整型引用」,並不是指標;整型指標是int *。

建議你不要用「鄙視」這樣的字眼,誰答得不好你大可不理會;這裡沒有什麼都明白的人,都明白的人不到這裡來!不明白可續問……

23樓:守望中的守護

首先回答你第二三個問題:在函式引數中使用&在c語言中是不存在的,你這使用了(當然你可能不知道)c++中引用的概念,簡單說就是你把兩個變數直接弄過去了而不是在傳它們的位址當然可行,把變數4和5直接傳過去理所當然是正確的。這樣也回答了你第三問。

第乙個問題我不太清楚你想幹什麼,如果在主函式中定義變數a,b而你希望在gsd中交換,但是你傳過去的a和b是在呼叫函式時創立的臨時變數!它們與主函式中的a,b是不同的,你在gsd中交換了臨時變數的值,一旦其執行完兩個臨時變數便被析構掉了而主函式中ab沒有變化

C語言中的log函式是怎麼意思,C語言中log函式怎麼使用啊

1 c語言中,有兩個log函式,分別為log10和log函式,具體用法如下 2 函式名 log10 功 能 對數函式log,以10為底 用 法 double log10 double x 程式示例 include include int main void 執行結果 3 函式名 log 功 能 對數...

用自定義函式進行兩個數的交換C語言

要用函式實現兩個數的交換,則函式引數必須定義為指標形式,否則函式中對專數值的修改將不會屬影響主調函式,這是c語言的規則。所以,以整型為例,自定義函式書寫如下 void swap int int a,int b c語言用函式如何實現兩個數交換?include stdio.h int swap int ...

c語言怎麼學啊我一點也不懂,C語言怎麼學啊 ??我一點也不懂

1 學好c語言,你可以很好地應付任何一種程式設計工具。2 一定要多上機練習,通過程式了解相關知識。幾經反覆方得正果。3 不要把學習c語言當成一種任務,更不要把它看成很難完成的任務。要充滿自信,只要是乙個智力正常的人都能學好c語言。始終保持遊戲的心態,多發現其中的樂趣。當感到程式設計趣味無窮,那你在電...