#include<stdio.h>
void fun1(int *a,int *b);
void fun2(int *a,int *b);
void fun3(int *a,int *b);
int main()
{
int i=10,j=20,*x=&i,*y=&j;
//fun1(x,y);printf("%d %d",*x,*y); 輸出10 20
//fun2(x,y); printf("%d %d",*x,*y);輸出10 10
fun3(x,y); printf("%d %d",*x,*y); //輸出20 10
return 0;
}
void fun1(int *a,int *b)
{
int *temp;
temp=a;
a=b;
b=temp;
}
void fun2(int *a,int *b)
{
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
void fun3(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
/*
(1) 對(duì)與第一個(gè)fun1()函數(shù)
為什么他們的值沒(méi)有發(fā)生改變呢? 我的理解是,fun()函數(shù)中
是a,b的地址調(diào)換了 應(yīng)該是改變了值才對(duì) 應(yīng)該是20 10,但是
他們沒(méi)有改變。
(2)對(duì)與第二個(gè)fun2()函數(shù)
*temp,*a,*b他們是指針變量所指向的值發(fā)生變化,應(yīng)該不會(huì)影響實(shí)參i,j吧
但是和我想的不一樣。
(3)對(duì)與第三個(gè)fun3()函數(shù)
為什么就改變了呢?
*/嚴(yán)格的說(shuō)法,在c中你無(wú)法改變實(shí)參,因?yàn)?code>c中傳遞參數(shù)是通過(guò)復(fù)制來(lái)傳遞的,由main函數(shù)到被調(diào)函數(shù)的過(guò)程中實(shí)參和行參已經(jīng)完全沒(méi)有了關(guān)系,除了值相同之外
之前就回答過(guò)你了,fun1中的行參a 以及 b 和 main 中的 x 以及 y 除了指向相同的地址之外
沒(méi)有任何的關(guān)系,你對(duì)調(diào)了a b不會(huì)對(duì)x 和 y產(chǎn)生任何影響,也不會(huì)對(duì) i 和 j 產(chǎn)生影響
而你所理解的能改變實(shí)參,指的是通過(guò)指針可以改變指向變量的值(畢竟指針就是干這個(gè)的?。?,無(wú)論指針(被調(diào)函數(shù)(fun1 fun2 fun3)中的 a b 以及 main中的x y )在哪里,只要指向的地方相同都能訪問(wèn)到那個(gè)指向的變量(i 以及 j),即通過(guò) *a 或者 *x 就能改變 i的值!
fun2 是錯(cuò)誤的寫法
指針本質(zhì)上是一個(gè)代表地址的整數(shù),用于尋址,強(qiáng)制類型轉(zhuǎn)換確實(shí)可以賦值給整型。
但是并不是所謂的地址調(diào)換,所以是你對(duì)指針的理解錯(cuò)誤了。
你這樣在整型和指針之間亂轉(zhuǎn)類型,尤其直接把拿 int 的值去尋址,八成都改了不知道哪里的內(nèi)存了。
吐槽下你的編譯器:
1.一個(gè) (int 型的 a) 居然可以被賦值給一個(gè) (指針 temp) 而不用顯示強(qiáng)制類型轉(zhuǎn)換。
2.居然可以把一個(gè)(int 型的 a)直接 *a 就當(dāng)作指針用。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。