這里有幾處關(guān)于指針和數(shù)組的問(wèn)題我不理解,求指教。
不解之處1.getMaxOrMin 函數(shù)的第一個(gè)形式參數(shù)是指針 int *arr,
但是為什么在main函數(shù)里調(diào)用這個(gè)函數(shù)的時(shí)候傳入的參數(shù)沒(méi)有加上取址符& ?
不解之處2.?getMaxOrMin 函數(shù)的第一行內(nèi)容是
int?temp?=?arr[0];
這里使用的是arr[ ]是數(shù)組,但是為什么傳參的時(shí)候形式參數(shù)是內(nèi)存指針變量 int *arr 而不是指針數(shù)組 int *arr[] ?
不解之處3.getMaxOrMin 函數(shù)的形式參數(shù)寫(xiě)的是指針 int *arr ,但為什么函數(shù)里第一行以數(shù)組的形式引用參數(shù)的時(shí)候沒(méi)有寫(xiě)成加上指針?lè)?hào)的形式
int temp = arr*[0];
而直接使用了?
int temp = arr[0];
?
2015-08-01
C語(yǔ)言數(shù)組和指針的關(guān)系很密切,有時(shí)甚至不分彼此。
1. 函數(shù)聲明的參數(shù)被聲明為數(shù)組時(shí),編譯器會(huì)把它視作指針,指向數(shù)組元素類(lèi)型。就是說(shuō)
數(shù)組名在用作右值時(shí)會(huì)被自動(dòng)轉(zhuǎn)換成指向其首元素的指針,像傳參這樣直接使用數(shù)組名的情形就將其用作右值,所以傳入 arr1 等同于傳入 &arr1[0],這樣一來(lái)傳入的類(lèi)型和函數(shù)參數(shù)聲明的類(lèi)型都是指向int的指針,完全能匹配。
2. 這就是指針和數(shù)組關(guān)系密切的另一個(gè)體現(xiàn):你可以在指針后加上取下標(biāo)運(yùn)算符,編譯器會(huì)從arr指向的內(nèi)存位置開(kāi)始,依照下標(biāo)向后(或前)來(lái)尋址,就好象arr是數(shù)組一般。 故 arr[0] 和 *arr 是一樣的。
3. 第三個(gè)問(wèn)題的前半部分已經(jīng)在第一個(gè)問(wèn)題的答案中了。?
后半部分你的理解錯(cuò)了,arr就是指針,沒(méi)有什么“加上指針?lè)?hào)”一說(shuō)。 在聲明一個(gè)指針時(shí),需要在類(lèi)型后、變量名前加上*,這個(gè)*表明你要把變量名聲明為一個(gè)指針。而使用指針時(shí)直接寫(xiě)變量名就好了,arr*[]什么的不是合法的寫(xiě)法。?
至于為什么可以寫(xiě)arr[0],我在第二問(wèn)的答案中說(shuō)過(guò)了。
你的三個(gè)問(wèn)題其實(shí)是同一個(gè)問(wèn)題,就是關(guān)于指針和數(shù)組的關(guān)系的。 前面說(shuō)了很多指針和數(shù)組相通的地方,但你還要記住,它們?nèi)允莾蓚€(gè)不同的類(lèi)型,并不能簡(jiǎn)單地互換。