C++数组做参数为什么一定要传递数组长度?
下面是一个将数组元素逆转的C++源代码,今天发现一个有趣而且不知道原因的问题。为什么reverse里面计算数组长度,intlen=sizeof(A)/sizeof(int...
下面是一个将数组元素逆转的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>
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]<<" ";
}
} 展开
4个回答
2015-12-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
因为怕引起数组越界,当数组传入一个函数后,就会用循环来处理。
比如下面的例子很好地说明了这个问题:
#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
比如下面的例子很好地说明了这个问题:
#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
展开全部
C++中函数的参数是数组的时候,传递给函数的是一个指针,指向数组的首地址,指针的大小一般固定为4B,一般情况下int 的大小也是4 ,所以。。。。数组的长度不是必须的参数,你可以不传递,传递进来只是为了方便编程,函数里面会用到,
不知道为什么变成了红色字。。- --
不知道为什么变成了红色字。。- --
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为A其实是一个指针,你肯定是用的x86,sizeof(A)表示的是地址的长度,x86地址长度为4个字节,所以sizeof(A)/sizeof(int)为1。(通常说到sizeof(A)为数组长度是c编译过程中自动替换的,如果数组作参数传入函数将不会替换,所以此时函数里的A就是一个指针)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假如我是main函数, 你是reverse函数,我调用你,只告诉你 一个int 类型的数组首地址,让你处理, 你不知道长度你怎么办事.
又不是字符串,字符串由'\0'结束嘛所以不需要告诉长度.
又不是字符串,字符串由'\0'结束嘛所以不需要告诉长度.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询