c語言中指標作為實參使用swap函式的問題

2021-05-24 13:55:23 字數 1290 閱讀 7258

1樓:匿名使用者

c語言中形參與實參的關係是:形參是實參的值副本。無論引數的型別是什麼,傳回遞到子函式中的形參只是答實參的值。

所以,在改變形參變數自身的值時,是與實參無關的。換句話說,形參的改變不會影響到實參。

但,如果引數型別是指標型別,則可以通過對指標變數所指向的地址中的資料進行修改,達到改變實參地址中的資料目的。

因此,使用swap函式進行資料交換時,必須保證兩點:

引數必須是指標型別,指向待交換的資料

交換時,必須交換地址中的資料,而不是交換地址本身。

參考**:

//錯誤的交換**1

void swap1( int a, int b ) //引數不是待交換資料的指標

//錯誤的交換**2

void swap2( int *a, int *b )//正確的交換**

void swap( int *a, int *b )

2樓:匿名使用者

你還沒了抄解值傳遞和地址傳遞的本襲質啊。

首先bai p ---> i q ----> j (p和duq分別存放i和j的地址)你呼叫swap函式。

就會zhi把實參的值複製一dao份給形參。也就是說a ----> i b ---->j。現在你在swap裡面使用t指標交換了

a和b,也就是a ---> j b---->i,也就是說你交換的是指標的值!但是你想想主函式main當中p和q交換了嗎??你只是複製了一份值給形參,自己本身沒改變。

你可以這樣實驗一下:

在swap函式中輸出看一下:printf("a:%d\tb:

%d\n",*a,*b); //你可以看一下結果是交換了的。不過隨著swap函式的結束而釋放了a,b的空間,然後回到main函式p和q的值還是原來的。

3樓:匿名使用者

你的這個baiswap中指標引數 *a,*b 已經退du化成普通的zhi區域性引數了dao,也就是說a和b同樣也只是形專參而已,屬只不過披了個指標的外衣,在函式體內交換的只是這兩個指標本身的拷貝,而不是它們指向的內容,因此需要用解除指標的方式來交換它們指向的內容。其實這裡提供指標做引數,只是為了讓你有辦法去訪問它們的實際指向內容(實參),指標本身(形參)的交換沒有任何意義。有兩種改法:

4樓:匿名使用者

void swap(int*a,int*b)

改為void swap(int*a,int*b)

c中指標怎麼用,c語言中指標怎麼使用

int p 宣告一copy個指向int的指標pint a a 3 p a printf d p 列印a的地址printf d p 列印a的值 p 4 改變a的值。printf d a 列印a的值為4 推薦看書 c和指標 這裡最好的回答吧,指標可不是一天兩天能夠學會的 c語言中指標怎麼使用?1 使用場...

c語言中指標和引用的區別,C語言中指標和引用的區別

指標,全稱為指標變數,是用來儲存記憶體地址的一種變數。程式中,一般通過指標來訪問其指向的記憶體地址中的內容 資料 引用,是c 中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標準c中不支援變數的引用。這兩個概念沒有任何相關性。指標是實實在在的變數,有自己的記憶...

c語言中指標在程式設計中有什麼作用,C語言中指標在程式設計中有什麼作用?

指標,太有用了,也最難管理的,好處多的是,比如,函式傳遞,引數是結構時,傳指標可以提高效能 可以通過傳遞和儲存指標,通過資料的相對位置來訪問資料,而不用定義不同的n個變數來,分別使用。比如 int a 10 那麼用a 0 a 9 即可訪問裡面的10個資料,而只需要知道a的地址即可,操作方便,而且在函...