函数参数传递整形数组时,必须要以数组长度作参数。
来源:互联网 发布:万网备案域名 编辑:程序博客网 时间:2024/05/16 17:26
/以下是我写的c++程序。
/函数f()的功能是去掉一个最大值和最小值后求平均值。
//跳水打分
#include<iostream>
using namespace std;
void f(double a[]); //参数是数组类型
//
int main()
{
double a[]={7.9,8.6,9.0,7.3,6.9,8.6,8.7,7.8,9.0};
f(a); //注意参数的传递
return 0;
}
//
void f(double a[])
{
int m=sizeof(a)/sizeof(double); //数组长度,error!!!仅仅将数组首地址传递给f(),无法求出长度(不知道何时结束)。
double sum=0.0;
//
for(int i=0; i<m-1; i++) //冒泡排序
for(int j=0; j<m-i-1; j++)
if(a[j]<a[j+1])
{ double temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
} //交换
//
for(int i=1; i<m-1; i++)
sum+=a[i];
//
cout<<sum/(m-2.0);
}
tips:传递整个数组作为参数时,为什么还需要数组的长度作为参数??
传递数组作为参数时只传递了数组在内存中的首地址,但对于数组有多大,必须由数组长度来确定。否则的话函数中对于数组的操作可能会越界,即对原本不属于数组的内存进行了修改,这样可能会导致程序出错。
当然,假如你能用其他方法来判断数组的结束地址,比如数组的最后一个元素设为一个特殊值,那么你也可以不用传递数组长度。(c++中string类型也是如此)
修改如下:
#include<iostream>
using namespace std;
void f(double a[],int ); //参数是数组类型,int 数组长度
//
int main()
{
double a[]={7.9,8.6,9.0,7.3,6.9,8.6,8.7,7.8,9.0};
int m= m=sizeof(a)/sizeof(double); //先求出数组长度m,传递给f()
f(a, m); //注意参数的传递
return 0;
}
//
void f(double a[], int m)
{
double sum=0.0;
for(int i=0; i<m-1; i++) //冒泡排序
for(int j=0; j<m-i-1; j++)
if(a[j]<a[j+1])
{ double temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
} //交换
for(int i=1; i<m-1; i++)
sum+=a[i];
//
cout<<sum/(m-2.0);
}
// 输出结果:8.27163
- 函数参数传递整形数组时,必须要以数组长度作参数。
- 二维数组作函数参数传递
- C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么?还有整形数组作函数参数的问题?
- C++数组作参数传递
- 数组指针作函数参数
- 指针数组作函数参数
- 二维数组作函数参数
- 二维数组作函数参数
- 二维数组作函数参数
- C中数组问题--数组作参数与数组长度
- 以不同方式向Shell函数传递数组参数
- 数组作为函数参数传递时
- 数组与函数参数传递
- 数组作为函数参数传递
- 数组作为函数参数传递
- 函数参数传递二维数组
- 多维数组 函数参数传递
- 数组作参数
- 专利大战:三星Galaxy Nexus遭禁全程始末
- java中定义常量和C#中定义常量的区别
- Linux下Android开发手机设备不可用问题
- move模式的 demo
- linux下shell日期运算
- 函数参数传递整形数组时,必须要以数组长度作参数。
- webkit webApp 开发技术要点总结
- 关于C语言的fprintf与fwrite使用区别
- 编写函数,将 x 中的位反过,创作一个镜像
- 带video和audio的mediastream.c
- 山寨布斯们的爱情故事
- 開發 iPhone Web App 的小技巧
- JVM参数设置使用技巧(1)
- 想做一个行业门户,主要功能这样