数组和字符串



一.数组


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会导致输出错误,\0ASCII码值是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个字符)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值