嵌入式学习-C语言-day06

数组

一、什么是数组?

数组是由一些有顺序相同类型的变量组成的。数组本质是复合类型。

二、数组的定义

数据类型 数组名[成员个数];

三、如何为数组赋值

数组是不能整个赋值的,需要给每一个元素赋值。例如:int a[3]; a[0] = 1;

由于数组中所有元素的地址是连续的,并且是有次序的,所以访问每一个元素就可以通过下标值访问.a[0]就是数组中的第一个元素

四、初始化

一般定义的同时初始化,如:

        int a[3] = {1,2,3};

此时,a[0] == 1,a[1] == 2, a[2] == 3;

若定义的时候没有进行初始化,则数组的成员默认值为0

五、数组名

数组名就是数组的起始地址,也可以说数组名指向首地址

数组名是一个常量,不能进行加减乘除自增自减运算。一旦数组定义完成,数组起始地址就确定了,永远也不会改变。

sizeof(数组名) 得到的是整个数组所占存储空间大小。例如:int arr[3]; sizeof(arr)所占的存储空间大小是3 * sizeof(int)的大小,也就是12个字节。

六、字符数组和字符串

1.什么是字符串?

字符串是由0个或更多的字符组成的,连续的存储的,由'\0'作为终止字符的数据类型。字符串被两个双引号引起来

2.字符数组

字符数组多用于存储字符串,c语言中没有字符串变量类型,如果想要存储字符串变量只能用字符数组.

3.字符数组的初始化

例子:

  1. char s1[10] = "hello";数组s1存储的是字符'h' 'e' 'l' 'l' 'o' '\0' '\0' '\0' '\0' '\0'
  2. char s2[5] = "hello";首先编译器不检查数组越界,所以不会报错,但是已然越界了。
  3. char s5[5] = {'h', 'e', 'l', 'l', 'o'}; 这个没问题的,但是不是字符串
  4. char s3[10] = {"hello"}; 语法是对的同i
  5. char s4[10] = {'h', 'e', 'l', 'l', 'o'}; 同i

4.字符串函数

  1. strlen(3) 求字符串长度
  2. strcpy(3) 字符串的复制
  3. strcat(3) 字符串的拼接
  4. strcmp(3) 字符串的比较
  5. strstr(3) 字符串中找子串
  6. strchr(3) 字符串中找字符
  7. strsep(3) strtok(3) 字符串切割
  8. 学习看函数手册 man 3

(3的意思是手册3)

5.类型

  1. char c[5];       &c取得c数组的地址,类型是char *
  2. 类型决定运算, 所以char *运算能力是sizeof(char),int *的运算能力是sizeof(int)
  3. char s[] = "hello";

        数组名s是这个数组的起始地址,也就是&s[0],所以s+1是就是第二个元素的地址,下标为1。

        数组s类型是char *, 数组s的运算能力是sizeof(char)也就是1

        在c有一个取值运算符是*,*(s + 1)是从s+1这个地址取得1个字节,也就是数组的第二个元素。在c中还有一个取值运算符是[].那么*(s+1)还可以表达为s[1]或者1[s]

        取值运算符是*和[]

七、多维数组

多维数组也就是数组的成员是一个数组,常见的多维数组为二维数组

二维数组的成员是一维数组

例如:

        int a[2][3]; a数组中有2个元素,每1个元素是有3个int类型变量组成的一维数组

存储

二维数组中所有的元素地址都是连续的,二维仅仅是一种表达形式

a这个数组中共有6个int类型的变量,这6个元素的地址是连续的

 取得二维数组中的元素a[i][j] , *(a[i] + j), *(*(a + i) + j)

二维数组的第一个中括号内可以省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值