c語言指標問題

2022-05-18 11:34:41 字數 1340 閱讀 5739

1樓:匿名使用者

改變的是swap函式裡面a,b的值,但是呼叫這個函式的函式裡面的變數沒有絲毫變化……

2樓:匿名使用者

首先你要明白一點,形參是實參的影子,不在一個記憶體空間中所以子函式中改變了,呼叫它的地方是不會改變的雖然指標式可以改變資料的,但是指標的內容是沒有改變的改變的只是指標指向的空間中的資料

3樓:

c語言是按值傳遞的,你在子函式裡交換了a,b的值,但是並沒有影響主調函式裡的a,b的值

應該改為

void swap(int **a,int **b)傳遞引數的時候 要傳遞指標的指標 你試試吧

4樓:

a和b都是指標拷貝,把它們換來換去,函式一退出,啥也沒了。只有把它們指向的內容換了才行,所以「一定要帶*的」說法很正確噢……

5樓:昌大少年

假設 int *是 elem型別。形參即為(elem a,elem b)

這就是典型的值傳遞了

應該加上 &,就變成地址傳遞了

即 (int * &a,int * &b)

6樓:匿名使用者

void swap(int *a,int *b)

7樓:匿名使用者

樓主,是這樣。我第一次回答問題啊。指標就是存的地址。

這點我想你大概已經知道了。 但是,你在傳遞函式裡面沒寫好。比如 a是1,它的地址是100,指標ponit1裡面存的地址是100,也就是說,對它應用,它指向的是a.

同理,b是2,它的地址是200,指標point2裡面存的地址是200,也就是說,對它應用,它指向的是b.現在 a小於b了,按照你的寫法,是把point 1和point2交換了,也就是point1現在存200,指向b,point2現在存100,指向1. 問題出在**了,在於你沒有對指標變數間接引用,你本來應該是想把point1指向的變數和point2指向的變數交換,結果你把point1和point交換了。

正確寫法是void swap(int *a,int *b)

8樓:

你是交換*a,*b的值的話,這樣:

void swap(int *a,int *b)

9樓:匿名使用者

在大括號裡面的tmp,a和b你可以理解為臨時指標變數,等到這個函式執行完返回之後,這三個臨時變數都會被釋放掉,你原來的a和b的值都沒有被修改

10樓:露風清宸

int型別直接用中間變數不就行了,幹嘛要用指標?用引用

void swap(int & a,int & b)

c語言的指標問題,C語言的指標問題

printf c p 3 分佈來看,c是要列印輸出一個字元。p指向那個字元陣列,p就是字元 a 那麼 a 3是多少呢,a 1是b 2 是c 3 是d注意是 p 3 而不是 p 3 這是由區別的。是的。p 3。是對p指向的那個值加3,p開始是指向a的,故a加3後就是d了 而p 執行3次的話,是指標p本...

C語言指標問題,求教大神C語言指標的問題搞不懂求大神指教

include include include include include static char chongpai char static int pare const void const void static int allocateintegerarr const char size ...

c語言指標的賦值問題C語言指標的賦值問題

指標在用要注意初始化,例如 int p p為指標,地址是未知的,如果直接賦值 p a 這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。可以int p a 或者int p p a 然後再...