數組作為形參時的一個陷阱
阿新 • • 發佈:2019-03-21
ali 方法 實參 i++ 對數 sci 數組長度 () c++
1.#include <iostream>
using namespace std;
//交換兩個值
void swap(int &a, int &b) {
int temp = 0;
temp = a;
a = b;
b = temp;
}
//把數組中元素為奇數的放左邊,偶數放有右邊。
//此處引發了我對C++ primer中關於對數組作為形參時,函數的定義為什麽要用一個int值作為下標變量,如果時候別的方法計算數組長度會如何,我想到了sizeof
void arr(int a[],int n) {
int begin = 0 ;
int end = n - 1;
//end=sizeof(a)/sizeof(a[0])-1; 錯誤:sizeof(a)/sizeof(a[0])的結果為1
while (begin<end)
{
while(a[begin] % 2 == 1 && begin < end)
begin++;
while(a[end] % 2 == 0 && begin < end)
end--;
swap(a[begin], a[end]);
}
}
int main() {
int ar[8] = { 1,2,3,4,5,6,7,8 };
arr(ar,8);
for (int i = 0; i != 8; i++) {
cout << ar[i] << " ";
}
return 0;
}
此例中,我曾試著在數組當形參的函數中使用sizeof來計算實參數組的大小。但是當數組作為形參的時候,其退化為一個指針,如果sizeof其數組名將計算的是一個指針的大小!
數組作為形參時的一個陷阱