这是一篇C语言的博客,如果你学过python那么我想你应该很熟悉什么是一维数组,什么是二位数组。那会说C语言与python语言不一样,他们的概念也应该不一样把?不不不他们对一维、二维数组的叙述都是一样的,只不过他们对操作这个数组的方式不一样。C语言是采用for循环的形式进行的。python好像也是这样吧,我记得是用函数和方法。
为了减少复习的时间,我会删减一些内容,但是这些内容在python的一维数组二维数组是一样的。因为我现在感觉写博客太浪费时间了,但是不写博客我又记不住。继续肝。
(一维二维数据相关概念)[python之文件和数据格式学习笔记 | huan’s Notebook (yanghuanh1314.github.io)]
我一句话概括一维数组就是一行数、线性。好了不说了
C语言怎么定义一个一维数组。
类型符 数组名[常量表达式]
int a[5]; // 定义一个数组
就这样,定义一个数组。这个元素有5个元素。
a[0]
a[1]
a[2]
a[3]
a[5]
需要注意一下,我们定义的是a[5]
但是没有下标为a[5]
的元素。在这里补充一句前面的a[0]
a[1]
等等也是下标哦。实在是不知道加那里了。int a[3+5]
也是合法的。但是要是说int a[i]
这就不可以了。4*5=20
学会定义一个数组,
int a[5];
那么应该怎么访问里面的元素呢?我们应该怎么用呢
数组名[下标]
只能一个一个访问,不可以一次访问整个整体。
int n[10]; // 定义一个数组,有10个元素
t = a[5]; // 将第5个元素赋值给t
然后是遍历数组,用到for循环。
很简单。
我们定义了一个数组,但是怎么让他里面有东西。两种方法
静态赋值
其实在这个程序中已经出现答案了
int a[10]={1,2,3,4,5,6,7,8,9,10};
要注意是{}
而不是[]
刚才已经试过了。但我记得python好像是[]
吧维数组
还有一些赋值方法。
int a[5]={1,2,3};
看这个,这个元素应该有5个元素,我却给了3个。剩下两个是什么?0
等价于
int a[10]={1,2,3,0,0};
如果说确定这个数组的元素,就可以不用给定数组长度。
int a[]={1,2,3};
动态赋值
什么是动态赋值,就是在键盘输入。还是用个for
因为要用for循环遍历每一个元素的地址。所以就
以上就是一维数组的内容,
什么是二维数组,他就是类似表格,有行有列。同时说起二维数组,上次遇到了一个题,忘得差不多了。
怎么定义一个二维数组呢?
类型符 数组名[常量表达式][常量表达式]
int a [3][4]; // 定义一个整数类型的二维数组
我们定义了一个3*4(三行四列)的数组。因为二维数组是一个表格,有行有列。三行思虑。
其实这个也是一个一维数组,特殊的一维数组。
可以看作是由三行的一维数组组成。一维数组数组是由四个元素组成。
我们展开来说a[3][4]
a[0]
------ a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1]
------ a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[2]
------ a[2][0]
a[2][1]
a[2][2]
a[2][3]
额怎么看呢,书上是这么说的
可以把
a[1]
a[1]
a[2]
看作3个一维数组的名字,上面定义的二维数组可以理解为有定义了三个一维数组。
怎么说呢,我们就以第一行举例。第一行的一维数组叫a[0]
然后里面有四个元素a[0] [0]
a[0] [1]
a[0] [2]
a[0] [4]
,hao!我用空格标注一下。
现在是二维数组在内存里面是怎么存储的呢?一维数组因为是线性的,是由一溜全部下来就会。二维数组是表格,怎么存储呢?
还是顺序存储,一行元素存储完,之后就是第二行的元素。我们看图
我们定义了一个二维数组
int a[3][4];
我们应该怎么用呢。就是说怎么取
数组名[下标][下标]
比如
int a[3][4]; // 定义数组
t = a[1][2]; // 取第1行第2列的这个元素
然后呢这个下标不是说你想怎么去就怎么取,他是有个范围的,行下标为02,列下标03
这是遍历二维数组,两个for循环。第一层是遍历行,第二行遍历列
我们在第二个for结束后加一个printf("n")
试试。
好!ok!
那这个数组怎么赋值呢?
静态赋值
分行赋值
int a[3][4]={1,2,3,4},{5,6,7,8},{9,10,11,12};
一个大括号为一行,共三行。一个大括号里面有4个元素。
整体放入花括号
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
赋值成这样,那你会想系统会怎么分配这个呢,系统是聪明的,他会以四个元素为一组。
第一行:1,2,3,4
,第二行: 5,6,7,8
,第三行:9,10,11,12
部分赋值
这个里面有很多种,但是他们说的都是一个。
int a[3][4]={{1},{5},{9}};
他是这样排列的,因为指定了a[0][0]
a[1][0]
a[2][0]
,其余为空自动用0
填充
部分赋值,就是这样,以此类推,有的地方可以不赋值,那就是默认为0
动态赋值
动态赋值难吗,我们可以参考一维数组的动态赋值
这是两个for循环
字符型数据是以字符的ASCII代码存储在存储单元中的一般占一个字节。由于ASCII代码属于整数形式,因此在C 99标准中,把字符类型归纳为整数类型的一种
C语言中没有字符串类型,也没有字符串变量,字符串是存放在字符型数组中的
这两段描述中,第一段应该是知道。第二段,我想起了我们有一个作业,我还想着用字符串去做呢,找了一圈,就是没有字符串,现在找到了。没有!
这个很简单。和定义一维数组的方式一样
char c[9];
char
字符类型,其他的和一维数组是一样的
c[0]='I';c[1]=' ';c[2]='a';c[2]='a';c[3]='m';c[4]=' ';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';
这10个元素在数组存储的状态。
我们说过字符型数据是以正数类型存储的,所以我们也可以
int a[10];
a[0]='a';
这样也可以,但是呢,浪费内存。 int
是4个字节,char
是一个
怎么引用和一维数组一样。
char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};
在我们复制过程中会出现两种情况,字符个数大于数组长度或者小于。
正常情况
这是正常情况的输出
小于数组长度
输出是这样的,但是老师说的小于数组长度会用