C语言平滑数组,快速上手系列-C语言之数组

我们需要表示某个班级学生的年龄,比如,张三今年3岁,李四今年80岁,很显然,我们可以用C语言中的某个数据类型来表示,比如int型:int age_zhangsan = 3; int age_lisi = 80; 那如果这个班级有50个同学,我们是不是需要定义50个变量来存放每个同学的年龄呢,当然可以,但是这么做真的很不合理。类似这样的问题,用数组就很好解决,同样的问题我们可以用 int ages[50]; 来表示,简单明了。

继上一篇《快速上手系列-C语言之基础篇(二)》写数据类型和运算符相关内容之后,这里简单介绍一下C语言中非常常用的一种数据结构,即数组。

数组的基本概念:

1、在程序设计中,为了方便处理数据,把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的相同类型数据元素的集合称为数组。数组往往被认为是一系列相同类型的变量,就像你去撸串儿,有羊肉串,有猪肉大串,也有串土豆片的等等,但很少有一串上既给你串了土豆又串了羊肉的,因为它们不是一个类型的,价格不一样串在一起不好算钱不是。

2、在C语言中,数组属于构造数据类型

一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或构造类型.按数组元素类型的不同,数组可分为数值数组、字符数组、指针数组、结构体数组等类别int a[10] = {1, 2, 3, 4, 5, 6}; //一维数组,整型数组a,有10个元素int b[4][2]={ {1, 2}, {3, 4}, {5, 6}, {7, 8} }; //二维数组,有四个元素,每个元素都是一个一维数组char buf[5] = {‘a’,’b’,’c’}; //字符数组struct student stus[5]; //结构体数组char buf[6] = {“hello”};char *q[10] = {&a[0], &a[1], &a[2]};char (*q)[10] = &a;

一维数组:

1、一维数组:

同一个数组,所有元素的数据类型是相同的.数组名的书写规则应符合标识符的书写规定.数组名不能与其它变量名相同,以下是错误的:void main( ){int num;float num[10];}方括号中常量表达式表示数组元素的个数;如a[3]表示数组a有3个元素,其下标从0开始计算,因此3个元素分别为a[0],a[1],a[2]不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式,例如:#define NUM 5void main( ){int n = 10;int a[n]; //错误int a[3+2],int a[2+NUM];}

2、一维数组的初始化:

在定义数组的同时对其进行赋值,称为初始化可以只给部分元素赋初值当{ }中数值少于元素个数时,只给前面部分元素赋值例如:int a[10]={0, 1, 2, 3, 4}; 只给a[0]~a[4]5个元素赋值,后5个元素自动赋0只能给元素逐个赋值,不能给数组整体赋值例如:给5个元素全部赋1值正确:int a[5]={1,1,1,1,1};错误:int a[5]=1;给全部元素赋值时,可以不给出数组元素的个数例如: int a[5]={1,2,3,4,5};可写为: int a[ ]={1,2,3,4,5};注意:全局数组若不初始化,编译器将其初始化为零,局部数组若不初始化,内容为随机值;

3、一维数组的引用:

数组元素也是一种变量,其标识方法为数组名后跟一个下标,在C语言中只能逐个地使用下标变量,而不能一次引用整个数组:

de8bb518511e77005ad10666dee8786d.png

二维数组

1、二维数组(在逻辑上二维数组是矩阵)

数组若只有一个下标,称为一维数组,其数组元素也称为单下标变量;在实际问题中有很多量是二维的或多维的,例如代数中的矩阵、生产中的报表;因此C语言允许构造多维数组;多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量;多维数组可由二维数组类推而得到

2、二维数组的定义

int a[3][4];定义了一个三行四列的数组,数组名为a,其元素类型为整型;该数组的元素个数为3×4个,即:a[0][0], a[0][1], a[0][2], a[0][3]a[1][0], a[1][1], a[1][2], a[1][3]a[2][0], a[2][1], a[2][2], a[2][3]二维数组在概念上是二维的,即其下标在两个方向上变化。实际的硬件存储器却是连续编址的,也就是说存储单元是按线性排列的,即放完一行之后顺次放入第二行。

3、二维数组的初始化

例如:数组a[2][3]按行分段赋值可写为:int a[2][3]={ {80, 75, 92}, {61, 65, 71} };按行连续赋值可写为:int a[2][3]={ 80, 75, 92, 61, 65, 71 };

4、二维数组的引用:

比如我们定义一个2行3列的二维数组 a[2][3]; 分别按列和按行打印出每个元素:

b3beb3980f23d6d65ae641f49973d409.png按列打印

c96f701c59bf0d379c96ecc83aaab550.png按行打印

字符数组:

1、字符数组的定义:

初始化赋值的时候可以不给定数组的大小,如char buf[6]="hello"; 可以写成char buf[]="hello";

char buf1[] = {'h', 'e', 'l', 'l', 'o'}; //没有'\0'char buf2[] = “hello"; //有'\0'

be51f887df9b89100b4c159237fe9593.png

注:这里需要注意一下,使用printf打印buf1和buf2,打印出现这种结果是因为printf遇到‘\0’结束。buf2含有'\0',使用printf打印遇到结束符'\0'就会结束,打印结果正常。而buf1没有'\0',输出hello后会继续输出内存中的数据,直到遇到结束符'\0'为止。

char a[][6] = { //一定要给出列数{‘h’,’e’,’l’,’l’,’o’},{‘a’,’b’,’c’,’d’,’e’}};char a[][6] = { “hello” , “world” }

2、字符数组的引用:

用字符串方式赋值比用字符逐个赋值要多占1个字节,用于存放字符串结束标志‘\0’;注:'\0'是由C编译系统自动加上的

如char buf[] = "hello"; 数组buf在内存中的实际存放情况为:'h', 'e', 'l', 'l', 'o', '\0';

这篇内容暂且就写这么多吧,下篇简单写写C语言函数方面相关内容,想了解的伙伴们可以随时关注。

15c7f67e62d3c876d95f16dff377efee.png

举报/反馈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值