一.数组
1.什么是数组
数组是用来存储一组数据(只能是相同类型(比如:int)的数据)
2.数组的特点
(1)只能那存放一种类型的数据:比如int类型的数组,float类型的数组
(2)里面存放的数据称为元素
3.数组的定义
(1)声明数组的类型
(2)声明数组的元素个数(需要的存储空间==数组类型*元素个数)
(3)格式:元素类型 数组名[元素个数](int age[3])
4.数组的使用
(1)初始化方式:(定义时初始化可以整体赋值,定义后再初始化只能一个一个赋值)
int age[3] = {12,22,32};
int a[3] = {10,9};(默认没赋值的为0)
int a[] = {11, 7, 6}; (确定就3个元素,就可以不写元素个数)
int a[4] = {[1]=11,[0] = 7}; (可以指定下标赋值,这样就不用按照先后顺序赋值了)
(2)元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始
(3)数组元素的访问:数组名[下标]
(4)错误写法:int age[];(不允许这样,不写元素个数,并且没有初始化)
(5)计算数组元素的个数:sizeof(数组名)/sizeof(数组类型)
(6)如果想在定义数组同时进行初始化,数组元素个数必须是常量(数组元素不能是变量),或者不写
(7)元素个数为变量时,不能定义时初始化,可以定义后,一个一个赋值
5.内存分析
(1)数组存储空间的大小:数组类型*元素个数
(2)存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
(3)数组名就是数组的地址,数组第一个元素的地址。
6.数组与函数
(1)数组作为函数参数,可以省略元素个数
(2)数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
(3)数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
二.二维数组
1.二维数组是一个特殊的数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组
成,这两个一维数组都包含了3个int类型的元素。
2.二维数组存储大小:数组类型*元素个数(第一个下标*第二个下标)
3.二维数组存储情况和一维数组一样,分配存储空间是高地址到低地址,内部元素的地址是从低地址开始。
4.二维数组的初始化:
int a[3][4] = {1,2,3,4,5,6};(从a[0][0]然后a[0][1]依次赋值,没赋值的默认为0。可读性不好)
int a[3][4] = {{1,2},{3,1,2},{}};{这种可读性比较好,第一个括号里面的是a[0]里面的数组值,然后以此类推}
int a[][5] = {3,21,31,2,32,1};{可以不写前面的下标,根据有几个元素确定下标值}
三.字符串
1.字符只能存放一个字符,所以就需要存储多个字符,字符串就是很多字符组合在一起,最后面有1个\0标志字符串的
结束,没有这个\0会导致输出错误,\0的ASCII码值是0,所以'\0' == 0。
2.字符串的初始化
(1)char a[] = “123”; 和 char a [] = {‘1’,’2’,’3’};(前面的是字符串后面有\0,后面那个是字符数组)
(2)char a[4] = {‘1’,’2’,’3’},也是字符串,后面省略1个0,0就是'\0'
(3)“123”其实是由’1’、’2’、’3’、’\0’组成
(4)字符串的输出”%s”,’\0’是不会输出的。输出是到\0结束的,没有会导致一直输出直到\0为止。
3.字符串处理函数
strlen(字符串/数组名/指针):会输出后面括号里字符串的字节长度(不包括\0,并且汉字是占3个字节的)。
注意:
(1)计算的是字符数,并不是字数。一个汉字算作3个字符。
(2)计算的字符不包括\0
(3)从某个地址开始数字符的个数,直到遇到\0为止
(4)使用strlen函数要在前面写上 #include <string.h>,因为string函数的声明在string.h文件中。
4.字符串的输出
printf("%s",数组名)。(用%s输出字符串,把数组地址传递进去,会从这个地址开始输出字符,直到遇到\0为止)
printf("%s",数组首元素的地址(&a[0]))。传入数组首元素的地址也可以。
四.字符串数组
1.使用场合
(1)一维字符数组中存放一个字符串,比如一个名字char name[20] = "wei"
(2)如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学
生的姓名(假设姓名不超过20字符)
(3)如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]
2.初始化
(1)char a[2][10] = { {'J','a','y','\0'}, {'J','i','m','\0'} };(写在2个大括号里,第一个代表a[0]里面的字
符元素,由于是字符串必须加\0)
(2)char a[2][10] = { {"Jay"},{"Jim"}};(2个大括号,里面直接放字符串)
(3)char a[2][10] = { "Jay","Jim" };(按顺序放字符串)
3.字符数组的输出
printf("%s\n", a[0]);(字符数组里面字符串的输出,输出1个字符串)
printf("%c\n", a[0][3]);(字符数组元素的输出,输出1个字符)