0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言基础知识(6)--数组与函数

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2023-06-15 10:35 次阅读

1.数组概念

数组:相同数据类型的集合。

定义格式:数据类型 数组名[成员个数];

示例:char buff[10]; --表示定义一个char类型数组buff,buff可以存放10个char类型变量;

2.数组特性

1.数组空间连续的,下标是0开始的,最后一个成员下标为成员个数-1;
2.数组名字表示数组首地址。
3.数组可以整体赋值(必须在定义数组时完成),也可以单个成员赋值;
4.数组空间大小计算:sizeof(数组名);成员个数:sizeof(数组名)/sizeof(数组名[0]);
5.数组整体初始化时,未初始化的成员默认初始化为0;单个成员赋值时,未初始化的成员为随机值。

pYYBAGSKdpCANmIAAABW7atE-d0405.png

示例:

#include < stdio.h >
int main()
{
	int buff[5]={10};/*定义一个int类型数组*/
	int data[]={10,20,20};/*定义一个int类型数组并完成初始化*/
	printf("buff数组空间:%ldn",sizeof(buff));
	printf("data数组空间:%ldn",sizeof(data));
	printf("buff数组成员个数:%ldn",sizeof(buff)/sizeof(int));
	printf("data数组成员个数:%ldn",sizeof(data)/sizeof(data[0]));
	int count=sizeof(buff)/sizeof(int);
	int i=0;
	/*数组遍历*/
	for(i=0;i< count;i++)
	{
		printf("buff[%d]=%dn",i,buff[i]);
	}
	int data2[5];
	data2[0]=100;
	for(i=0;i< 5;i++)
	{
		printf("data2[%d]=%dn",i,data2[i]);
	}
}
pYYBAGSKdsaAffIdAAHWJ7IsChk959.png

示例2:定义一个5个成员整型数组,从键盘上获取5个整数,输出数组所有成员(正向和逆向);输出最大值,最小值和平均值;

#include < stdio.h >
int main()
{	
	int buff[5];
	int count=sizeof(buff)/sizeof(buff[0]);
	printf("请输入%d个整数:",count);
	int i;
	for(i=0;i< count;i++)
	{
		scanf("%d",&buff[i]);
	}
	printf("数组遍历:");
	for(i=0;i< count;i++)
	{
		printf("%d ",buff[i]);
	}
	printf("n");
	printf("数组逆向遍历:");
	for(i=count-1;i >=0;i--)
	{
		printf("%d ",buff[i]);
	}
printf(“n”);
	int min,max;
	float avg=0;
	min=max=buff[0];
	for(i=0;i< 5;i++)
	{
		avg+=buff[i];
		if(min >buff[i])
		{
			min=buff[i];
		}
		if(max< buff[i])
		{
			max=buff[i];
		}
	}
	avg/=count;
	printf("最大值:%dt最小值%dt平均值%.2fn",max,min,avg);
}
[wbyq@wbyq 1227]$ ./a.out 
请输入5个整数:45 12 1 35 422
数组遍历:45 12 1 35 422 
数组逆向遍历:422 35 1 12 45 
最大值:422	最小值1	平均值103.00

3.二维数组

一维数组仅有一行,二维数组则有行和列。

二维数组定义格式:数据类型 变量名[参数1][参数2];

示例:int buff[3][4];

行列性质:定义一个int类型的二维数组,二维数组有3行4列;

数组关系:定义一个int类型的二维数组,[3]表示在二维数组中存放3个一维数组,[4]表示每一个一维数组中有4个int类型成员。

二维数组空间计算:sizeof(buff);
二维数组行计算:sizeof(buff)/sizeof(buff[0])
二维数组列计算:sizeof(buff[0])/sizeof(int )

  • 二维数组定义及输出示例:
#include < stdio.h >
int main()
{
	int array[3][4];
	int array2[][4]={10,20,30,20,20};
	printf("array=%lun",sizeof(array));//3*4*4=48
	printf("array2=%lun",sizeof(array2));//2*4*4=32
	int line=sizeof(array2)/sizeof(array2[0]);//计算行
	printf("line=%dn",line);
	int row=sizeof(array2[0])/sizeof(int);//sizeof(int)等同于sizeof(array2[0][0])
	printf("row=%dn",row);
	int i,j;
    //二维数组遍历
	for(i=0;i< line;i++)
	{
		for(j=0;j< row;j++)
		{
			printf("array2[%d][%d]=%dn",i,j,array2[i][j]);
		}
	}
}
[wbyq@wbyq 123]$ ./a.out 
array=48
array2=32
line=2
row=4
array2[0][0]=10
array2[0][1]=20
array2[0][2]=30
array2[0][3]=20
array2[1][0]=20
array2[1][1]=0
array2[1][2]=0
array2[1][3]=0

4.函数

函数作用:提高代码利用率,是程序结构更简洁、清晰。
函数特性:函数功能单一,重复利用性高;

4.1 函数格式

返回值类型 函数名(形参)
{
  语句块;
}

函数没有返回值时,返回值类型则用void表示
函数不需要传参时,形参则用void表示。

4.2 注意事项

1.函数形参不能为静态变量
原因:

1.静态变量只会初始化一次,而函数形参每一次函数调用都会重新赋值。
2.静态变量生存周期是和main函数一样,而函数形参只能作用于当前函数。

2.函数形参与实参

1.函数形参是变量时不能改变实参的值。形参要改变实参的值需要通过指针方式。

2.函数形参只能作用于当前函数,形参名和实参名可以不一样,但形参类型和实参类型必须一一匹配。函数形参由调用函数时分配空间,在函数结束时释放空间。

3.函数返回值

1.函数返回值可以返回函数局部变量的值,不能返回局部变量的地址。

4.3 函数示例

形参为int类型,返回值为int类型。
写一个函数实现求两个数之和;

#include < stdio.h >
int func(int,int);/*声明函数*/
int main()
{
	int data;
	int a=10;
	int b=20;
	data=func(a,b);
	printf("data=%dn",data);
}
/*
写一个函数实现求两个数之和;
*/
int func(int a,int b)
{
	return a+b;
}

形参为数组类型,返回值为void;

编写一个函数,实现数组遍历。

#include < stdio.h >
void array_print(int buff[],int count);//声明函数
int main()
{
	int buff[]={10,20,30,42,20,20};
	printf("数组空间大小:%ldn",sizeof(buff));
	array_print(buff,sizeof(buff)/sizeof(int));
}
/*
实现函数:完成数组遍历
形参:buff[]  --要遍历的数组
     count  -- 数组成员个数
返回值:无
*/
void array_print(int buff[],int count)
{
	int i=0;
	//printf("数组空间大小:%ldn",sizeof(buff));//错误,不能对形参进行空间计算,对地址sizeof返回值永远都为8
	for(i=0;i< count;i++)
	{
		printf("buff[%d]=%dn",i,buff[i]);
	}
}

编写一个函数,实现二维数组遍历。

#include < stdio.h >
void twoarray_print(int [][4],int ,int );
int main()
{
	int array2[][4]={10,20,30,20,20};
	int line=sizeof(array2)/sizeof(array2[0]);//计算行
	printf("line=%dn",line);
	//计算列
	int row=sizeof(array2[0])/sizeof(int);//sizeof(array2[0][0])
	printf("row=%dn",row);
	twoarray_print(array2,line,row);
}
void twoarray_print(int buff[][4],int line,int row)
{
	int i,j;
	for(i=0;i< line;i++)
	{
		for(j=0;j< row;j++)
		{
			printf("%d ",buff[i][j]);
		}
		printf("n");
	}
}
[wbyq@wbyq 1227]$ gcc main.c 
[wbyq@wbyq 1227]$ ./a.out 
line=2
row=4
10 20 30 20 
20 0 0 0 

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128731
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595
收藏 人收藏

    评论

    相关推荐

    C语言基础知识科普

    C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识
    发表于 07-21 10:58 1698次阅读

    C语言基础知识(5)--循环语句

    C语言基础知识(5)--循环语句
    的头像 发表于 06-15 10:18 1384次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>基础知识</b>(5)--循环语句

    c语言基础知识

    c语言基础知识
    发表于 08-17 17:03

    Linux下C语言编程基础知识

    Linux下C语言编程基础知识
    发表于 08-20 17:21

    关于C语言基础知识

    一、C语言基础知识关于C语言C语言相对于汇编是属于高
    发表于 08-20 07:03

    C语言基础知识的树状结构是如何组成的

    该图是关于C语言基础知识的树状结构图,也许里面有些地方看起来不够主流,但是可能更合理。以后将会对该图的所有细节知识点以通俗易懂的方式逐个梳理,敬请关注!...
    发表于 11-08 07:39

    C语言编程的基础知识

    机器人创新实验室培训(软件篇)--01前言C语言编程的基础知识c语言的介绍c
    发表于 11-30 08:25

    浅谈几个C语言基础知识

    文章目录前言一、位操作二、使用步骤前言这里主要是简单的复习一下几个 C 语言基础知识点,引导那些 C 语言
    发表于 12-09 07:14

    C语言基础知识汇总

    单片机-C语言基础知识总结本文为个人学习笔记,仅供学习参考用,如有侵权,请联系zhankun3280@139.com(一)简单理解32位操作系统只能支持4G内存(二)数据类型(❤表示重要程度)重点
    发表于 01-24 07:28

    关于MDK下C语言基础知识汇总

    MDK5的使用技巧有哪些?关于MDK下C语言基础知识汇总
    发表于 02-25 06:47

    C语言基础知识(一)

    、嵌入式系统和科学计算等领域。作为一名程序员,了解C语言基础知识是非常重要的。本文将详细介绍C语言的基础概念,包括数据类型、变量、运算符、
    发表于 08-07 16:51

    C语言基础知识(一)

    、嵌入式系统和科学计算等领域。作为一名程序员,了解C语言基础知识是非常重要的。本文将详细介绍C语言的基础概念,包括数据类型、变量、运算符、
    发表于 08-10 15:16

    为什么C语言函数不能返回数组

    C语言函数可以返回指针、结构体,为什么不能返回数组? 下面一步一步来分析: 1 函数不能返回数组 在C
    的头像 发表于 03-29 11:18 1757次阅读

    C语言基础知识讲解

    C语言基础知识讲解
    发表于 05-19 17:39 13次下载

    STM32中C语言基础知识

    C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识,希望能对大家有所帮助。
    的头像 发表于 04-27 17:42 999次阅读
    STM32中C<b class='flag-5'>语言</b>的<b class='flag-5'>基础知识</b>