重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
调用时把【】去掉,表示掉用这个数组的所有元素,数组的名称表示数组第一个元素的地址。
成都创新互联公司始终坚持【策划先行,效果至上】的经营理念,通过多达十年累计超上千家客户的网站建设总结了一套系统有效的营销解决方案,现已广泛运用于各行各业的客户,其中包括:酒店设计等企业,备受客户赞扬。
数组的定义可以写成:
int
table[]={1,2,3,}
或者table[3],不能写成table[],因为系统在定义数组时就给数组分配了地址,table[]没有确定元素的个数,不能分配地址空间。
但是作为形参,可以这样写,void
tab(int
table[])
,不知道为什么,呵呵
如果一个函数的目的是要产生一个新的数组,那么最好的做法是在调用函数前就生成好这个数组,然后把这个数组作为参数传给函数,在函数中修改这个数组的值.
像你这种做法,在sum函数结束后,sth3数组就作为局部变量被释放了.而且在main中,sum数组声明以后,sum就是一个常量了,又怎么能放在=左边呢.
另外,sum函数的算法也错了.
正确代码如下:
void Sum(int sth1[][3],int sth2[][3],int sth3[][3])
{
int i = 0;
int j =0;
do
{
sth3[i][j]=sth1[i][j]+sth2[i][j];
j++;
if(j==3) {i++;j=0;}
}while(i3);
}
int main(void)
{
int matrix1[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
};
int matrix2[3][3]={
{1,4,7},
{2,5,8},
{3,6,9},
};
int sum[3][3];
Sum(matrix1,matrix2,sum);
Display(sum);
return 0;
}
#includestdio.h
int Input(long num[], float score[]);
void Total1(long num[], float score[], int n);
void Total2(long num[],float score[],int n);
int main(){
long num[30];
float score[30];
int n;
n=Input(num, score);
Total1(num, score,n);
Total2(num, score,n);
return 0;
}
int Input(long num[], float score[]){
int i=0;
while(i30){
scanf("%ld%f",num[i],score[i]);
if(score[i]0)
break;
i++;
}
return i;
}
void Total1(long num[], float score[], int n){
int i,c=0;
for(i=0; in; i++){
if(score[i]60){
c++;
printf("%ld\n",num[i]);
}
}
printf("The score60 is:%d\n",c);
}
void Total2(long num[],float score[],int n){
int i,c=0;
float a=0;
for(i=0; in; i++)
a+=score[i];
a/=n;
for(i=0; in; i++){
if(score[i]=a){
c++;
printf("%ld\n",num[i]);
}
}
printf("The score=averge is:%d\n",c);
}
其实实参数组没有将每个元素都复制到形参数组中,而是将实参数组的首地址传递给形参,然后根据首地址对实参进行操作。所以实参数组和形参数组拥有同一段内存空间。因此,当形参数组发生变化,实参也会变化。(这叫做数组名作函数参数)