1.数组作为形参时的一个陷阱
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其数组名将计算的是一个指针的大小!