数组作为形参时的一个陷阱

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其数组名将计算的是一个指针的大小!

 

猜你喜欢

转载自www.cnblogs.com/Royzzzzz/p/10574170.html