函数(4)

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;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值