首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言,当数组作为参数传递的时候,如何获得数组的长度

2012-02-06 
C语言,当数组作为参数传递的时候,怎么获得数组的长度刚学C语言,遇到一个问题。void main(){int score[] {

C语言,当数组作为参数传递的时候,怎么获得数组的长度
刚学C语言,遇到一个问题。
void main(){
int score[] = {10,20,30,40,50,60,70,80,90};
}
int getLength(int score[]){
*****
}
在方法。getLength里面。socre参数其实是一个指针,这样就没法求出数组的长度,想了好久,也试验了很多次,都没有找到求数组长度的方法,希望高手指点一下。

[解决办法]
这样行么?

C/C++ code
int getLength(int score[]){  int* p;  int num=0;  p=score;  while(p!=null)  {    num++;    p++;  }  return num;}
[解决办法]
这种方法求不出来,别用函数求数组长度。
[解决办法]
什么书?题目有答案?
[解决办法]
这个问题一般情况都是将数组长度连同数组地址一起作为入参传进去的,为什么非要算出来呢,多浪费时间
[解决办法]
探讨
没有。。。就是传入一个成绩数组。然后求出平均 成绩的题目。但是方法只能传一个成绩数组,其他都不能传递。

[解决办法]
在数组还没变指针前 length=sizeof(score)/sizeof(int) 一起作为参数传入函数

不然定义一个宏 #define Getlength(arr) (sizeof(arr))/(sizeof(int))

[解决办法]
数组最后一个元素用一个不可能的成绩标注,比如 -1,表示数组结束
[解决办法]
一般情况下,不能去求数组的长度吧?
首先,编译器对数组溢出是不做检查的。你定义了a[10],其实你使用a[20]也可以的,只不过会不会出错,就看你人品了。

字符串数组,是有结尾标志位的:'\0'

如楼上所说,你可以标注一个-1来作为结束标志。

不过更好的办法,还是传入一个长度值。很多函数都是这样的。比如最明显的main(int, char* [])
如果数组的长度可以计算出来,那main的第一个参数就没有必要了。
[解决办法]
探讨

在数组还没变指针前 length=sizeof(score)/sizeof(int) 一起作为参数传入函数


[解决办法]
数组要判断得尾部加个flag
[解决办法]
对于这个问题,若参数中不传送数组长度的话,只能借助指针实现数组结束判断,具体代码如下,希望对你有所帮助.
#include<stdio.h>
#include<unistd.h>
float avg(int score[])
{
int sum=0;
int num=0;
float avg=0.0;
int *p;
p=score;
while((*p)!=NULL)
{
sum+=*p;
num++;
p++;
}
avg=sum/num;
return avg;

}
int main()
{
int score[]={10,20,30,40,50,60,70,80,90};
printf("平均成绩为:%f\n",avg(score));
return 0;
}


[解决办法]
先算出数组长度,将长度和数组同时传递给函数
[解决办法]
16楼正解,可以改成下面这样:
C/C++ code
#include<stdio.h>int getAvgScore(int score[]){int *p;int num=0;int sum=0;p=score;while((*p)!=-1){sum+=*p;num++;p++;}return sum/num;}int main(){int score[]={10,20,30,40,50,60,70,80,-1};//此处-1作为数组结束标志int a=0;a=getAvgScore(score);printf("a=[%d]\n",a);} 

热点排行