亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

這里有幾處關于指針和數組的問題我不理解,求指教。


不解之處1.getMaxOrMin 函數的第一個形式參數是指針 int *arr,

http://img1.sycdn.imooc.com//55bc8ea60001487f05290474.jpg

但是為什么在main函數里調用這個函數的時候傳入的參數沒有加上取址符& ?

http://img1.sycdn.imooc.com//55bc8b5b0001ce9203960214.jpg


不解之處2.?getMaxOrMin 函數的第一行內容是

int?temp?=?arr[0];

這里使用的是arr[ ]是數組,但是為什么傳參的時候形式參數是內存指針變量 int *arr 而不是指針數組 int *arr[] ?


不解之處3.getMaxOrMin 函數的形式參數寫的是指針 int *arr ,但為什么函數里第一行以數組的形式引用參數的時候沒有寫成加上指針符號的形式

int temp = arr*[0];

而直接使用了?

int temp = arr[0];

?

正在回答

1 回答

C語言數組和指針的關系很密切,有時甚至不分彼此。

1. 函數聲明的參數被聲明為數組時,編譯器會把它視作指針,指向數組元素類型。就是說

void?fun(int?a[]);
void?fun(int?*a);?//?和上面是一樣的

數組名在用作右值時會被自動轉換成指向其首元素的指針,像傳參這樣直接使用數組名的情形就將其用作右值,所以傳入 arr1 等同于傳入 &arr1[0],這樣一來傳入的類型和函數參數聲明的類型都是指向int的指針,完全能匹配。


2. 這就是指針和數組關系密切的另一個體現:你可以在指針后加上取下標運算符,編譯器會從arr指向的內存位置開始,依照下標向后(或前)來尋址,就好象arr是數組一般。 故 arr[0]*arr 是一樣的。


3. 第三個問題的前半部分已經在第一個問題的答案中了。?

后半部分你的理解錯了,arr就是指針,沒有什么“加上指針符號”一說。 在聲明一個指針時,需要在類型后、變量名前加上*,這個*表明你要把變量名聲明為一個指針。而使用指針時直接寫變量名就好了,arr*[]什么的不是合法的寫法。?

至于為什么可以寫arr[0],我在第二問的答案中說過了。


你的三個問題其實是同一個問題,就是關于指針和數組的關系的。 前面說了很多指針和數組相通的地方,但你還要記住,它們仍是兩個不同的類型,并不能簡單地互換。

1 回復 有任何疑惑可以回復我~
#1

KyungLee 提問者

理解了,就是這里沒搞懂!非常感謝!
2015-08-04 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之起航篇
  • 參與學習       290962    人
  • 解答問題       817    個

C++亮點盡在其中,本課程是在C語言基礎上的一個延伸,得以升華

進入課程

這里有幾處關于指針和數組的問題我不理解,求指教。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號