一維陣列做函式的輸入

2021-10-01 18:31:44 字數 1214 閱讀 8942

陣列做輸入,退化為指標

以乙個簡單的程式為例,如給陣列排序

void print_array(int *arr, int len);

void sort_array(int *a, int n);

int main(void)

;//獲取元素個數

int n = sizeof(a) / sizeof(a[0]);

printf("排序前\n");

//首先進行一次輸出,陣列、長度作為輸入引數

print_array(a, n);

//給陣列排序

sort_array(a, n);

printf("排序後\n");

//再次輸出陣列的元素

print_array(a, n);

printf("\n");

system("pause");

return 0;

}void print_array(int *arr, int len)

printf("\n");

}void sort_array(int *a, int n)}}

}執行結果如下

在上面的程式中,陣列a作為乙個引數被傳入函式sort_array()和print_array(),跟它同時被傳入的還有陣列長度n,為什麼需要這兩個引數?

以函式print_array()為例

void print_array(int *arr, int len)

printf("\n");

}可以看到,陣列 a 被交給了形參 int *arr 這就是乙個標準的指標,而對於函式print_array()來說,不論 a 是個指標、位址、陣列名甚至是乙個null,它都會被當做乙個指標使用,c語言就是這麼單純不做作。

不過這也帶來了乙個問題,它把 a 當成指標了,那陣列的長度怎麼獲得呢?只通過 a 本身是怎麼也不可能知道的。就像是print_array()的第3、4行

int n = sizeof(arr) / sizeof(arr[0]);//元素個數

printf("指標型陣列長度%d\n",n);

這句話使用了算陣列arr中的元素個數的,很常見,它的輸出結果在上面就出現過了,n = 1,也就是說在arr中陣列長度這個資訊是不存在的,這就是為什麼

void print_array(int *arr, int len)會用到第二個引數int len,它的作用就是告訴print_array()我給你傳進去的陣列它有多長。

c語言一維陣列做引數傳遞給函式

今天碰到了一維陣列做函式引數的問題,那就扒一扒這個問題 首先拋結論 1 c語言中,當一維陣列做函式引數時,編譯器總是把它解析成乙個指向其首元素的指標。2 實際傳遞的陣列大小與函式形參指定的陣列大小沒有關係。然後舉例說明 下面是乙個元素交換函式,把陣列array i 和array j 交換位置。注意看...

c語言一維陣列做引數傳遞給函式

今天碰到了一維陣列做函式引數的問題,那就扒一扒這個問題 首先拋結論 1 c語言中,當一維陣列做函式引數時,編譯器總是把它解析成乙個指向其首元素的指標。2 實際傳遞的陣列大小與函式形參指定的陣列大小沒有關係。然後舉例說明 下面是乙個元素交換函式,把陣列array i 和array j 交換位置。注意看...

二維陣列的輸入

不像二維陣列那樣,可以直接對arr i j 進行迴圈賦值。在vector 中,因為vector是乙個容器,最外層的vector容器中放著更小的vector,而里層的vector裡面放的是int型的數字。所以我們首先要對裡層的vector容器賦值,然後再把裡層的vector作為元素插入到外層的vect...