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

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

函數傳入的是指針,為什么不是數組?使用函數的時候為什么又是數組名,不是指針?

為什么函數getMaxOrMin在傳參時,定義的是指針,而不是數組?

同時在使用該函數的時候為什么不是指針*arr1?

正在回答

3 回答

補充樓上所說。

問題一:函數傳入的是指針,為什么不是數組?

傳參,可以傳數組,傳指針可以使代碼更簡潔。(傳指針只需要傳4個字節,傳數組需要傳sizeof(arr)個字節,在本程序中,傳數據的話需要傳4*sizeof(int)=16個字節)

首先,main 函數中的 int arr1[4]; 定義了一個有4個int型元素的數組,這個數組名為arr1。也可以理解為 “arr1”指向了存儲了4個int型元素的空間。此時,arr1是這段空間的首地址。

接著我們定義了一個getMaxOrMin(int* arr,...),這里的int *arr,表示它接受的參數是一個int 型的指針,也可以理解為,這個函數的第一個參數,需要傳入 一個 指向一段int型元素空間的 地址。

在main函數,去調用getMaxOrMin(int *arr,...)

我們希望將arr1[4]的所有元素做個比較,得到最大值,因此我們需要傳入一個,可以指向整個數據的首地址。

這個可傳入的首地址不唯一,arr1 ,&arr1[0]都可以。

問題二:使用函數的時候為什么又是數組名,不是指針?

在函數中使用*arr1完全沒有問題,這是*arr1代表的是arr1[0]的數據,如果要比較其它元素。則需要使用

*arr1,*(arr1+1),*(arr1+2),*(arr1+3),對應關系如下:

*arr1?= arr[0]

*(arr1+1) = arr[1]

*(arr1+2) = arr[2]

*(arr1+3)? = arr[3]

對比一下,是不是直接使用arr[0]、arr[1]、arr[2]、arr[3]更簡潔一些呢?







3 回復 有任何疑惑可以回復我~

額, 有錯別字,不能修改,

第一段原話是“傳數據的話需要傳4*sizeof(int)=16個字節”,應該是“傳數組的話需要傳4*sizeof(int)=16個字節”。

第五段原話是“可以指向整個數據的首地址”,應該是“可以指向整個數組的首地址”

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

qq_回鍋肉_2

抱歉,傳數組的話需要傳4*sizeof(int)=16個字節。這句話是錯誤的。解釋如下: 數組在當做參數傳遞時,會退化為指針。 因此不管你定義的getMaxorMin(int *arr,...),還是getMaxorMin(int arr[4],...)。在此函數中的arr的大小都是4,也就是一個指針的大小。回到原問題,兩種寫法都沒有問題,只是推薦第一種寫法,依然簡潔。
2020-03-28 回復 有任何疑惑可以回復我~

這里的*arr1相當于是傳arr1的首地址,定義函數要引用數組一個是*arr1,還有就是arr1[].兩種。

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

weixin_慕沐4018656 提問者

不太懂你的意思耶
2020-03-24 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

函數傳入的是指針,為什么不是數組?使用函數的時候為什么又是數組名,不是指針?

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

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

幫助反饋 APP下載

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

公眾號

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