在计算数组所有元素之和等等问题时,经常需要知道某一个数组的长度,其求解公式如下:
int data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = sizeof(data) / sizeof(data[0]);
size就是数组data[]的长度。
数组作为实参和形参时,长度不同的原因:
#include "stdafx.h"
int add(int a[], int len)//此处使用*a,效果一样
{
int sum = 0;
//实参在传递时,是当作指针来传递的,实际传递的是数组的第一个元素
//数组做型参时,数组名称当作指针使用!!
printf("%d\n", sizeof(a));//4
for (int i = 0; i < len; i++)
{
sum += a[i];
}
return sum;
}
int main()
{
int data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = sizeof(data) / sizeof(data[0]);
printf("%d\n", sizeof(data));//40
printf("结果是:%d\n", add(data, size));
return 0;
}
结论:将函数的参数声明为数组和声明为指针是一样的。
特别注意:在初始化数组时,如果不知道数组的长度,如:double a[]={0.0};系统在计算sizeof(a)时,会默认它的值为8,sizeof(a[0])=8;从而数组a的长度将一直是1,不管你在此之前为它赋了多少个值。