函數(shù)傳入的是指針,為什么不是數(shù)組?使用函數(shù)的時(shí)候?yàn)槭裁从质菙?shù)組名,不是指針?
為什么函數(shù)getMaxOrMin在傳參時(shí),定義的是指針,而不是數(shù)組?
同時(shí)在使用該函數(shù)的時(shí)候?yàn)槭裁床皇侵羔?arr1?
為什么函數(shù)getMaxOrMin在傳參時(shí),定義的是指針,而不是數(shù)組?
同時(shí)在使用該函數(shù)的時(shí)候?yàn)槭裁床皇侵羔?arr1?
2020-03-23
舉報(bào)
2020-03-27
補(bǔ)充樓上所說。
問題一:函數(shù)傳入的是指針,為什么不是數(shù)組?
傳參,可以傳數(shù)組,傳指針可以使代碼更簡(jiǎn)潔。(傳指針只需要傳4個(gè)字節(jié),傳數(shù)組需要傳sizeof(arr)個(gè)字節(jié),在本程序中,傳數(shù)據(jù)的話需要傳4*sizeof(int)=16個(gè)字節(jié))
首先,main 函數(shù)中的 int arr1[4]; 定義了一個(gè)有4個(gè)int型元素的數(shù)組,這個(gè)數(shù)組名為arr1。也可以理解為 “arr1”指向了存儲(chǔ)了4個(gè)int型元素的空間。此時(shí),arr1是這段空間的首地址。
接著我們定義了一個(gè)getMaxOrMin(int* arr,...),這里的int *arr,表示它接受的參數(shù)是一個(gè)int 型的指針,也可以理解為,這個(gè)函數(shù)的第一個(gè)參數(shù),需要傳入 一個(gè) 指向一段int型元素空間的 地址。
在main函數(shù),去調(diào)用getMaxOrMin(int *arr,...)
我們希望將arr1[4]的所有元素做個(gè)比較,得到最大值,因此我們需要傳入一個(gè),可以指向整個(gè)數(shù)據(jù)的首地址。
這個(gè)可傳入的首地址不唯一,arr1 ,&arr1[0]都可以。
問題二:使用函數(shù)的時(shí)候?yàn)槭裁从质菙?shù)組名,不是指針?
在函數(shù)中使用*arr1完全沒有問題,這是*arr1代表的是arr1[0]的數(shù)據(jù),如果要比較其它元素。則需要使用
*arr1,*(arr1+1),*(arr1+2),*(arr1+3),對(duì)應(yīng)關(guān)系如下:
*arr1?= arr[0]
*(arr1+1) = arr[1]
*(arr1+2) = arr[2]
*(arr1+3)? = arr[3]
對(duì)比一下,是不是直接使用arr[0]、arr[1]、arr[2]、arr[3]更簡(jiǎn)潔一些呢?
2020-03-28
額, 有錯(cuò)別字,不能修改,
第一段原話是“傳數(shù)據(jù)的話需要傳4*sizeof(int)=16個(gè)字節(jié)”,應(yīng)該是“傳數(shù)組的話需要傳4*sizeof(int)=16個(gè)字節(jié)”。
第五段原話是“可以指向整個(gè)數(shù)據(jù)的首地址”,應(yīng)該是“可以指向整個(gè)數(shù)組的首地址”
2020-03-24
這里的*arr1相當(dāng)于是傳arr1的首地址,定義函數(shù)要引用數(shù)組一個(gè)是*arr1,還有就是arr1[].兩種。