陣列做輸入,退化為指標
以乙個簡單的程式為例,如給陣列排序
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...