5.11 数组和函数开发初见
九、数组作为函数的参数
1、传递数组中的某个元素
意义不大--传递数组中的某一个元素
2、数组名当做函数实际参数
(1)传递的是什么,内存空间和变量的值传递有什么不同点和相同点
也是值传递,不过传递的是地址而已
5.12 数组传参中关于形式参数的秘密
形参中,不存在数组的概念,即便中括号约定了数组的大小,也无效。 传递的是数组的首地址,在操作系统中,8个字节表示一个地址、
#include <stdio.h>
int countarry(int a[0],int len);
int main()
{
int a[3]={1,5,9};
int len;
len=sizeof(a)/sizeof(a[0]);
countarry(a,len);//数组名代表整个数组的首地址,
//或者countarry(&a[0],len);//第一个元素的地址就是数组的首地址
printf("数组a的大小:%d\n",sizeof(a));
return 0;
}
int countarry(int a[0],int len)
{
int i;
printf("背调 数组a的大小:%d\n",sizeof(a));
for(i=0;i<len;i++)
{
printf("数据%d 长度为%d \n",a[i],len);
}
printf("\n");
}
<1> 输出数组
#include <stdio.h>
#include <stdlib.h>
void arry(int a[3]);
int main()
{
int i;
int ret;
int a[3]={1,2,3};
arry(a);//调用时,只能用数组名,不能写成arry(a[3])调用时,
return 0;
}
void arry(int a[3])
{
int i;
for(i=0;i<3;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
<2> 输入数组并输出。【len改为4或者7时,直接改int main中的内容、】、
#include<stdio.h>
int scount(int a[1],int len);
int main()
{
int len;
int a[7];
len=sizeof(a)/sizeof(a[0]);
scount(a,len);
return 0;
}
int scount(int a[1],int len)
{
int i;
printf("请输入相应数值:\n");
for(i=0;i<len;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
}
5.13 数组实参很有意思的问题启发
(2)有意思的案例,关于地址(未来的指针)、
#include <stdio.h>
int countdata(int data)
{
data=data+10;
return data;
}
int main()
{
int data=100;
int z;
z=countdata(data);
printf("%d",z);
return 0;
}
子主题 1 a+10 ,数值的传递----主调函数和被调函数,地址不同,值不同。、
#include <stdio.h>
int countdata(int data)
{
data=data+100;
printf("countdata %d ",data); //return data;
}
int main()
{
int data=10;
int z;
countdata(data); //z=countdata(data);
printf("main %d ",data);
return 0;
}
子主题 2 a[]+10 主调函数和被调函数,地址相同,+10后,值相同
5.14 数组实战之计算不同班级学生的平均分
(3)编程案例:有两个班的同学,分别是10个人和5个人,分别求这两个班的平均分
/*
5!=5 *4 * 3 *2 *1 一个返回值,两个参数
*/
#include <stdio.h>
void initarry(int arry[],int size);
void priarry(int arry[],int size);
float getaver(int arry[],int size);
int main()
{
int arryone[5];
int arrytwo[10];
int sizeone;
int sizetwo;
int averclassone;
int averclasstwo;
sizeone=sizeof(arryone)/sizeof(arrytwo[0]);
sizetwo=sizeof(arrytwo)/sizeof(arrytwo[0]);
initarry(arryone,sizeone);
initarry(arrytwo,sizetwo);
priarry(arryone,sizeone);
priarry(arrytwo,sizetwo);
averclassone=getaver(arryone,sizeone);
averclasstwo=getaver(arrytwo,sizetwo);
printf("一班的平均分:%d",averclassone);
printf("二班的平均分:%d",averclasstwo);
return 0;
}
void initarry(int arry[],int size)
{
int i;
for(i=0;i<size;i++)
{
printf("请输入第%d个学生的成绩:\n",i+1);
scanf("%d",&arry[i]);
}
}
void priarry(int arry[],int size)
{
int i;
printf("该班级总人数:%d个\n",size);
for(i=0;i<size;i++)
{
printf("%d ",arry[i]);
}
printf("\n done\n");
}
float getaver(int arry[],int size)
{
float aver=0.0;
int i;
int sum=0;
for(i=0;i<size;i++)
{
sum=arry[i]+sum;
printf("%d ",sum);
}
printf("done\n");
aver=(float)sum/size;
return aver;
}