快捷搜索:  汽车  科技

c语言字符串和字符数组:零基础学C语言 知识总结六 数组

c语言字符串和字符数组:零基础学C语言 知识总结六 数组3、如给全部元素赋值,则在数组中说明,可以不给出数组元素的个数2、可以只给部分元素赋初值,其他的元素赋0。如: int a; float a[10]; (非法) int n=5; int a[n];(非法) int a[5 6]; (合法的)初始化:(注意,在使用数组之前,一定要先初始化)1、数组的初始化可以在定义时一并完成

c语言字符串和字符数组:零基础学C语言 知识总结六 数组(1)

1、介绍数组

一个常量变量就是一个用来存储数值的命名区域。同样,一个数组就是一个用来存储一系列变量值的命名区域,因此,可以使用数组组织常量变量。也就是说,数组是一组有序数据的集合,存储在数组中的值称为数组元素。每个数组元素有一个相关的索引(也称为关键字),它可以用来访问元素。在大多数编程语言中,数组都具有数字索引,而且这些索个通常是从0或1开始的。数组中的每个元素都属于同一个数据类型。

一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。一维数组是计算机程序中最基本的数组。二维及多维数组可以看作是一维数组的多次叠加产生的。

c语言字符串和字符数组:零基础学C语言 知识总结六 数组(2)

2、一维数组

当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用数组中的任意一个元素,一维数组的引用定义格式为:类型 数组名[下标]如:int a[10]

其中,a是一维数组的数组名,该数组有10个元素,依次表示为a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]。需要注意的是,数组是从零开始是 所以a[10]不属于这一个数组的空间范围中。当在说明部分定义了一个数组变量后,编译程序会在内存空间中开辟一串连续的存储单元。对于数组而言,程序的执行部分使用的是数组变量而不是数组类型。在引用时,下标必须是整数,但可以是整型变量或整型表达式。如果使用表达式,会先计算表达式以确定下标。程序只能逐个应用数组中的元素而不能一次引用整个数组,再定义数组时,需要指定数组中元素的个数,方括号里边的常量数值表示了数组的长度。在数组定义前加const关键字可将整个数组变为只读,将不再可以对数组进行写入数据。

如: int a; float a[10]; (非法) int n=5; int a[n];(非法) int a[5 6]; (合法的)

初始化:(注意,在使用数组之前,一定要先初始化)

1、数组的初始化可以在定义时一并完成

2、可以只给部分元素赋初值,其他的元素赋0。

3、如给全部元素赋值,则在数组中说明,可以不给出数组元素的个数

4、数组的初始化可以是用循环进行输入数值赋值,也可以是在程序中指定赋值

例子:

c语言字符串和字符数组:零基础学C语言 知识总结六 数组(3)

3、二维数组

二维数组本质上是以数组作为数组元素的数组即“数组的数组”,类型说明符 数组名[ 常量表达式][常量表达式]。

二维数组又称为矩阵,行列数相等的矩阵称为方阵。

对称矩阵a[i][j]=a[j][i]二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m p,列下标从q到n q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:(t为一个字节数)LOC (a[i][j]) = LOC(a[p][q]) ((i−p) * n (j −q)) * t 按“列优先顺序”存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) ((j −q) * m (i−p)) * t存放该数组至少需要的单元数为(m-p 1) * (n-q 1) * t 个字节​二维数组只是形式上的二维,但是在计算机内部它的存储方式还是连续的线性的。它只是一种特殊的一维数组。

二维数组的定义和一维数组的概念规则基本相似,一般形式为:类型说明符 数组名【常量表达式】【常量表达式】。

初始化稍有不同

注意,二维数组的列数是必须要给出的,行数是可以有编译器来数。

每行一个{},逗号分离

最后的的逗号可以存在(有古老的传统)

如果省略,表示补零

例子:杨辉三角

c语言字符串和字符数组:零基础学C语言 知识总结六 数组(4)

Tips

1、编译器和运行环境都不会检查数组的下标是否越界,无论是对数组的单元读还是写,一旦程序运行,越界的数组访问就可能造成问题,导致程序崩溃。

2、但有时候也有可能运气好,不会造成严重后果。

3、所以这是程序员的责任来保持程序只使用有效的下标值,:[0 - 数组的大小减1]

4、数组可以出现在赋值号的左边或右边,在左边叫左值,在右边叫右值

5、如果在定义数值型数组时,指定了数组的长度,并且对其初始化,凡是未被“初始化”的元素,系统有时候会自动将它们初始化为零,如果是字符型,则初始化为‘\0’,如果是指针型,则初始化为NULL,即空指针,不过,最好还是自己初始化好比较好。

4、字符的输入输出

有五种输入:gets(),getchar(),getch ()scanf() fgets() (文件类)

有五种输出:puts(),putchar(),putch(),printf() fputs()(文件类

输入:

1、gets()函数原形:char * gets(char * ptr); 用于从标准输入流stdin读入一个整行(以'\n'或EOF)结束,并且回车键会被过滤掉,不会被读到字符串中,写入指向的字符数组,并返回这个指针;出错或袭遇到文件结束时则返回NULL。行末的'\n'从流中取出,但不写入数组。gets()不检查被写入的数组大小。其可以无限读取,不会判断上限,以回车结束读取

2、getchar()函数原形:int getchar(void); 每次只读入一个字符,用于从标准输入流stdin读入字符,括回车键也会被读成一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。它输入的字符被存放在sewll的缓冲区中,直到用户按回车才会执行,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了

c语言字符串和字符数组:零基础学C语言 知识总结六 数组(5)

猜您喜欢: