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