C++数组做参数为什么一定要传递数组长度?

下面是一个将数组元素逆转的C++源代码, 今天发现一个有趣而且不知道原因的问题。为什么reverse里面计算数组长度, int len=sizeof(A)/sizeof(int);为什么结果始终为1。

#include <iostream>
using namespace std;

class Solution1
{
public:
void reverse(int A[], int n){ //n represent the length of A.
if(n==0 || n==1) return;
//int len=sizeof(A)/sizeof(int);
int lhs=0;
int rhs=n-1;
while(lhs<rhs){
swap(A[lhs], A[rhs]);
lhs++;
rhs--;
}
}
private:
void swap(int &a, int &b){ //exchange the number.
int temp=a;
a=b;
b=temp;
}
};
int main(){
Solution1 s;
int A[]={1, 3, 5, 6, 7, 8, 9, 10 , 25, 23, 14};
int len=sizeof(A)/sizeof(int);
s.reverse(A,len);
for(int i=0; i<len; i++){
cout<<A[i]<<" ";
}
}

因为怕引起数组越界,当数组传入一个函数后,就会用循环来处理。

比如下面的例子很好地说明了这个问题:

#include "iostream.h"
int max(int a[],int size);//size是数组的大小
int main()
{
int number[]={2,45,12,6,23,98,13,3};
cout <<max(number,sizeof(number)/sizeof(int)) <<endl;
return 0;
}
int max(int a[],int size)
{
int max=0;
for (int i=0;i<size;i++)
{
if (a[i]>max)
max=a[i];
}
return max;
}
运行结果:
98
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-12
C++中函数的参数是数组的时候,传递给函数的是一个指针,指向数组的首地址,指针的大小一般固定为4B,一般情况下int 的大小也是4 ,所以。。。。数组的长度不是必须的参数,你可以不传递,传递进来只是为了方便编程,函数里面会用到,
不知道为什么变成了红色字。。- --
第2个回答  2020-02-14
因为A其实是一个指针,你肯定是用的x86,sizeof(A)表示的是地址的长度,x86地址长度为4个字节,所以sizeof(A)/sizeof(int)为1。(通常说到sizeof(A)为数组长度是c编译过程中自动替换的,如果数组作参数传入函数将不会替换,所以此时函数里的A就是一个指针)
第3个回答  2014-06-12
假如我是main函数, 你是reverse函数,我调用你,只告诉你 一个int 类型的数组首地址,让你处理, 你不知道长度你怎么办事.
又不是字符串,字符串由'\0'结束嘛所以不需要告诉长度.本回答被网友采纳
相似回答