向函数传递数组的问题

本文探讨了C++中使用数组作为参数时遇到的问题,特别是如何准确获取数组大小并进行求和运算。介绍了通过指针及引用的方式解决数组传递过程中的问题,并给出了正确的实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  考虑下面的问题: 
#include <iostream> 
using namespace std; 

int Sum(int i[]) 
{ 
int sumofi = 0; 
for (int j = 0; j < sizeof(i)/sizeof(int); j++) // 
实际上, sizeof(i) = 4 
{ 
sumofi += i[j]; 
} 
return sumofi; 
} 

int main() 
{ 
int allAges[6] = {21, 22, 22, 19, 34, 12}; 
cout<<Sum(allAges)<<endl; 
system("pause"); 
return 0; 
} 

  Sum 
的本意是用 sizeof 得到数组的大小,然后求和。但是实际上,传入自函数 Sum 的,只是一个 int 类型的指针,所以 sizeof(i)=4 ,而不是 24 ,所以会产生错误的结果。解决这个问题的方法使是用指针或者引用。 

  
使用指针的情况: 
int Sum(int (*i)[6]) 
{ 
int sumofi = 0; 
for (int j = 0; j < sizeof(*i)/sizeof(int); j++) //sizeof(*i) = 24 
{ 
sumofi += (*i)[j]; 
} 
return sumofi; 
} 

int main() 
{ 
int allAges[] = {21, 22, 22, 19, 34, 12}; 
cout<<Sum(&allAges)<<endl; 
system("pause"); 
return 0; 
} 
  
在这个 Sum 里, i 是一个指向 i[6] 类型的指针,注意,这里不能用 int Sum(int (*i)[]) 声明函数,而是必须指明要传入的数组的大小,不然 sizeof(*i) 无法计算。但是在这种情况下,再通过 sizeof 来计算数组大小已经没有意义了,因为此时大小是指定为 6 的。 
使用引用的情况和指针相似: 

int Sum(int (&i)[6]) 
{ 
int sumofi = 0; 
for (int j = 0; j < sizeof(i)/sizeof(int); j++) 
{ 
sumofi += i[j]; 
} 
return sumofi; 
} 

int main() 
{ 
int allAges[] = {21, 22, 22, 19, 34, 12}; 
cout<<Sum(allAges)<<endl; 
system("pause"); 
return 0; 
} 
  
这种情况下 sizeof 的计算同样无意义,所以用数组做参数,而且需要遍历的时候,函数应该有一个参数来说明数组的大小,而数组的大小在数组定义的作用域内通过 sizeof 求值。因此上面的函数正确形式应该是: 
#include <iostream> 
using namespace std; 

int Sum(int *i, unsigned int n) 
{ 
int sumofi = 0; 
for (int j = 0; j < n; j++) 
{ 
sumofi += i[j]; 
} 
return sumofi; 
} 

int main() 
{ 
int allAges[] = {21, 22, 22, 19, 34, 12}; 
cout<<Sum(i, sizeof(allAges)/sizeof(int))<<endl; 
system("pause"); 
return 0; 
} 

 
 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2482683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值