課程
/后端開發
/C++
/C++遠征之起航篇
為什么函數getMaxOrMin在傳參時,定義的是指針,而不是數組?
同時在使用該函數的時候為什么不是指針*arr1?
2020-03-23
源自:C++遠征之起航篇 5-1
正在回答
補充樓上所說。
傳參,可以傳數組,傳指針可以使代碼更簡潔。(傳指針只需要傳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]更簡潔一些呢?
額, 有錯別字,不能修改,
第一段原話是“傳數據的話需要傳4*sizeof(int)=16個字節”,應該是“傳數組的話需要傳4*sizeof(int)=16個字節”。
第五段原話是“可以指向整個數據的首地址”,應該是“可以指向整個數組的首地址”
qq_回鍋肉_2
這里的*arr1相當于是傳arr1的首地址,定義函數要引用數組一個是*arr1,還有就是arr1[].兩種。
weixin_慕沐4018656 提問者
舉報
C++亮點盡在其中,本課程是在C語言基礎上的一個延伸,得以升華
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2020-03-27
補充樓上所說。
問題一:函數傳入的是指針,為什么不是數組?
傳參,可以傳數組,傳指針可以使代碼更簡潔。(傳指針只需要傳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]更簡潔一些呢?
2020-03-28
額, 有錯別字,不能修改,
第一段原話是“傳數據的話需要傳4*sizeof(int)=16個字節”,應該是“傳數組的話需要傳4*sizeof(int)=16個字節”。
第五段原話是“可以指向整個數據的首地址”,應該是“可以指向整個數組的首地址”
2020-03-24
這里的*arr1相當于是傳arr1的首地址,定義函數要引用數組一個是*arr1,還有就是arr1[].兩種。