为什么数组作为参数时还要以数组长度作为参数

本文通过一个具体的C++程序示例,详细解释了当数组作为函数参数传递时的常见误解及其背后的原因。揭示了为何在函数中使用数组时,需要额外注意其长度的传递。

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

最近看到这么一道题目:

//请输出下面代码的结果:
//答案:6
#include<iostream>
using std::cin;
using std::cout;
using std::endl;

int function(char arr[]);

int main()
{
	char array[] = "ABCDEF";
	cout << function(array) << endl;
}

int function(char arr[])
{
	int sum = 0;
	int len = sizeof(arr) / sizeof(char);
	
	for (int i = 0; i < len; ++i)
	{
		sum += (arr[i] - 'A');
	}
	return sum;
}

先看vs2019运行结果:确实如此。

 试着分析:

int function(char arr[])
{
	int sum = 0;
	int len = sizeof(arr) / sizeof(char);
	
	for (int i = 0; i < len; ++i)
	{
		sum += (arr[i] - 'A');
		//char array[] = "ABCDEF";
	}
	return sum;
}

一开始,我的想法是:arr分别是A B C D E F  在与A做减法时,强制转成int型,sum相继加上0 1 2 3 4 5,结果不应该是15吗?为什么会是6?

先做一下实验:输出sizeof(arr),发现是4!

这样一来问题就清晰了:

将数组作为函数参数的时候,实际上就是传进去一个指针(指向数组的首元素),然后在参数列表上哪怕你是写明了这是一个数组且他的长度是多少,编译器只认为这是一个指针,而不是一个数组,sizeof得到的结果就永远是4,所以我们在把数组作为函数参数的时候还要把数组的大小传进去。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值