我们先来看一下以下代码,这段代码主要是计算数组内元素的综合:
#include <iostream>
using namespace std;
int Total(int A[], int size) {
int i, sum=0;
for (i = 0; i < size; i++) {
sum += A[i];
}
return sum;
}
int main() {
int A[] = { 1,2,3,4,5 };
int size = sizeof(A) / sizeof(A[0]);
int sum = Total(A,size);
cout << "the total is " << sum << endl;
}
输出结果如下:
这时候我们再改一下代码,将计算数组大小的代码放入Total函数里面,而不是在Main函数里面,同样是计算数组元素的总和:
#include <iostream>
using namespace std;
int Total(int A[]){
int i, sum=0;
int size = sizeof(A) / sizeof(A[0]);
for (i = 0; i < size; i++) {
sum += A[i];
}
return sum;
}
int main() {
int A[] = { 1,2,3,4,5 };
int sum = Total(A);
cout << "the total is " << sum << endl;
}
运行结果如下:
为什么两次运行结果不一样呢,第一次运行的结果15是我们期待的,但第二次运行的结果1显然是错的。
原因主要是数组作为函数参数传入的时候,是地址传入,而不是值传入,所以在Total函数中的int size = sizeof(A) / sizeof(A[0]);这里的A其实是一个指针,该指针指向了数组的首地址,由于该数组是整型的,所以该指针也是整型的,存储4个字节,所以这里size的最终结果是1,导致后面循环只循环一次,得到的总和就是1。