C++中sizeof在函數體內與在main函數裏的不同表現

這是一個求數組元素之和的程序

下面是錯誤代碼

#include <iostream>
using namespace std;

int main()
{
	int Array[]={5,8,6};
	int SumOfArray;
	SumOfArray=Sum(Array);
	cout<<SumOfArray;
}

int Sum (int a[])
{
	int sum=0;
	for (int i=0;i<( sizeof(a) / sizeof(int) );i++)
		sum += a[i];
	return sum;
}

該程序的輸出結果是:5
而不是我們所期待的:19

經過debug,終於發現問題所在!

原來Sum函數定義裏面(sizeof(a)/sizeof(int))返回值是1,而不是我們期待的數

但是如果這樣修改

#include<iostream>
using namespace std;

int Sum(int a[],int len);

int main()
{
	int Array={5,8,6};
	int SumOfArray;
	SumOfArray = Sum (Array,(sizeof(Array) / sizeof(int) ));
	cout<<SumOfArray;
}

int Sum(int a[],int len)
{
	int sum = 0;
	for(int i = 0;i < len;i++)
		sum +=a[i];
	return sum;
}

這樣得到的結果就是我們所希望的:19

經過後面指針的學習,找到了問題所在:
傳遞的數組參數在Sum()中,實際上是一個指針
所以聲明Sum(int a[] , int len )等價於Sum(int * a , int len)是等價的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章