函式中陣列形參的一些用法總結

2021-09-13 11:19:25 字數 1542 閱讀 9793

陣列在函式中傳遞,在函式的形參中的描述有三種方法:

//第一種方案是直接寫明乙個陣列

void printptr(int array) {}

//第二種方案是直接寫成陣列帶長度,其實已退化成第一種情況

void printptr1(int array[10]) {} //在這裡寫10也不會傳遞陣列的長度

//第三種方案是直接傳遞指標

void printptr2(int* array) {}

對於以上三種方案進行總結

第一種是最好的形式,一眼就可以看出來我們傳遞的是乙個陣列,這種方法明確說明是陣列,而且在陣列裡面沒有寫長度,不會引起誤會,推薦使用

第二種方案可以明確陣列長度,但是寫陣列長度會引起誤會,再加乙個引數可以明確陣列長度的話,可以消除誤會

第三種方法,是寫明傳遞的是一種指標,完全看不出來是傳遞陣列

三種方案是等效的,功能是相同的,唯一不同的是理解方式。

另外,如果陣列中的數值不允許修改時,可以加上const進行修飾

void printptr4(const int* array,int array_size) {}
說到這裡了,再提醒下我自己

const int* ptr 和 int* const ptr的區別

const int* ptr //指標所指的記憶體裡的值是唯讀的,簡言之,指標所指記憶體唯讀

int* const ptr1 //指標ptr1是唯讀的,但ptr1指標所指的記憶體中的值是可讀寫,簡言之,唯讀指標

以上的都是通過指標做為形參,下面就說下以引用進行傳遞形參

1.在通中情況下,以非引用方式傳遞陣列時,編譯器會將陣列悄悄轉變為指標進行傳遞,這也是c語言的精髓所在,這裡的轉換讓我們察覺不到陣列和指標的轉換,潛意識裡面認為陣列和指標是一樣的。

2.在通過引用方式傳遞陣列時,是將整個陣列進行傳遞,而不會把陣列轉換為指標進行傳遞,陣列大小(&arr)[10] 會轉換為實參進行傳遞,在匹配時編譯器會嚴格匹配陣列的大小寫形參的大寫是否一致。

//通過引用傳遞陣列,傳遞的時候陣列的長度有明確的

void printrefarr(int (&arr)[10])

}int main()

; int arr[5][10] =,,,

,};

//printptr(a,9);

//printptr1(a,a+9);

//printptr2(a);

printarr(arr,5);

printrefarr(a);

cout << endl;

for(int i = 0; i< 5;i++)

return exit_success;

}

最後再寫一點,關於多維陣列的事兒,在c和c++中多維陣列其實是由一維陣列,而一維陣列中的元素就是乙個上一維的陣列,舉例說,乙個二位陣列a[10][20],那麼這個陣列裡面到底有多少個元素,其實是乙個10個一維陣列(*a)[20]組成的乙個陣列,那麼一維陣列的另乙個元素是多少呢

函式指標陣列的一些用法

首先函式指標陣列是陣列,其次陣列裡面存放的是函式指標,函式指標又是什麼呢,函式指標是指向函式首位址的指標,我個人認為函式指標陣列可以批量像呼叫陣列元素一樣方便呼叫一些功能相似的一些函式 小弟愚見 我寫這個部落格之前就是遇到這個問題。首先介紹一下我遇到問題背景,想做個mini3216時鐘,顯示時間是用...

Python一些函式的用法總結

一 字串的split用法 描述 python split 通過指定分隔符對字串進行切片,如果引數 num 有指定值,則僅分隔 num 個子字串 語法 split 方法語法 str.split str num string.count str 引數 str 分隔符,預設為所有的空字元,包括空格 換行 ...

函式指標等的一些用法總結

int tmain int argc,tchar argv template include stdafx.h include include include using namespace std c 寫檔案和讀檔案 int main ifstream in d out1.txt if in.is...