【从零开始的嵌入式生活】必备基础知识5——数组和字符串

简介: 【从零开始的嵌入式生活】必备基础知识5——数组和字符串

前言

今天是一天三更的尝试,这篇文章我们来了解一下【数组和字符串】

希望大家可以跟着我一起学习,一起加油!

三连即可提高学习效率0.0


🧑🏻作者简介:一个学嵌入式的年轻人

✨联系方式:2201891280(QQ)

📔源码地址:https://gitee.com/xingleigao/study_qianrushi

⏳全文大约阅读时间: 60min


文章目录

 前言

 一、数组

         一维数组

         二维数组

        多维数组

 二、字符数组和字符串

        字符数组方法

 三、字符串函数

        字符串长度函数strlen

        字符串连接函数strcat

        字符串拷贝函数strcpy

        字符串比较函数strcmp

        一种错误

 四、扩展字符串函数

 写在最后

数组


构造数据类型之一

数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素

数组中各元素的数据类型要求相同,用数组名和下标确定。数组可以是一维的,也可以是多维的。

一、数组

一维数组

所谓一维数组是指只有一个下标的数组。它在计算机的内存中是连续存储的。

C语言中的声明方式为:


<存储类型>  <数据类型 >  <数组名>[<表达式>] ;

8b9ce56465e8118f6133c99b1f8ffba.png

其实数组名就是一个指针,指向首地址的位置。

注意的点:


C语言对数组不作越界检查,使用时要注意int a[5]; a[5] = 10编译不报错

可以用变量定义数组维数int i = 15; int a[i]

数组必须先定义,后使用

只能逐个引用数组元素,不能一次引用整个数组

数组元素表示形式:数组名[下标] (本质上就是指针的解引用,可以结合指针来看)

初始化方式


1.static int a[5];等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4] = 0;

2.int a[5]={6,2,3};等价于:a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0;

3,int a[]={1,2,3,4,5,6};//编译系统根据初值个数确定数组维数

二维数组

定义方式:


数据类型 数组名[常量表达式][常量表达式];


第一个叫做行,第二个元素叫做列。所以元素个数=行数*列数

注意:声明时列数不能省略,行数可以,其实就是多维数组只能省略最前面的那个值。


7f579e0a2bc4abde26cc71d8d925d84.png

二维数组在内存中是顺序存储的,原因:内存是一维的 二维数组:按行序优先

二维数组元素的初始化


分行初始化

按元素排列顺序初始化

举个例子:int[][3]={{1},{4,5}}


多维数组

具有两个或两个以上下标的数组称为多维数组。

其实本质上就是套娃,如果把二维数组看成一个整体,那么再连续声明多个二位数组,就是三维数组,然后可以再多,全部都是套娃0.0

二、字符数组和字符串

字符数组方法

字符数组是元素的数据类型为字符类型的数组

初始化方式:


逐个赋值

字符串常量

举个例子:


char s[6] = {'h','e','l','l','o'};
char s[6] ="hello";
char s[] = "hello";


上面三种方式赋值的都是完全相同的!所以可以使用字符串来赋值更方便一些,但是字符串会多需要一个存储单元(’\0’)**

二位数组的初始化


char fruit[][7] = {"Apple","Orange","Grape","Pear","Peach"};


和二位数组是很类似的。


三、字符串函数

字符串的处理函数主要再string.h中,所以用到相关函数需要引入头文件。


#include<string.h>


常见的字符串处理函数:


求字符串长度的函数strlen

字符串拷贝函数strcpy

字符串连接函数strcat

字符串比较函数strcmp

字符串长度函数strlen

strlen(字符数组)


功能: 计算字符串长度

返回值: 返回字符串实际长度,不包括‘\0’在内

\xhh表示十六进制数代表的符号

\ddd表示8进制的

例:对于以下字符串,strlen(s)的值为:


char  s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};
char  s[ ]=“\t\v\\\0will\n”;
char  s[ ]=“\x69\141\n”;


答案:1 3 3


字符串连接函数strcat

strcat(字符数组1,字符数组2)


功能: 把字符数组2连到字符数组1后面

返回值: 返回字符数组1的首地址

注意的点:


字符数组1必须足够大

连接前,两串均以‘\0’结束;连接后,串1的’\0’取消,将后串连同’\0’连接。

字符串拷贝函数strcpy

格式: strcpy(字符数组1,字符串2)

功能: 将字符串2,拷贝到字符数组1中去

返回值: 返回字符数组1的首地址

注意的点:


字符数组1必须足够大

拷贝时‘\0’一同拷贝

字符串比较函数strcmp

格式: strcmp(字符串1,字符串2)

功能: 比较两个字符串

比较规则: 对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止

返回值: 返回int型整数


若字符串1< 字符串2, 返回负整数

若字符串1> 字符串2, 返回正整数

若字符串1== 字符串2, 返回零

一种错误

char dest[] = {'a', 'b', 'c'};
char src[N] = ".com.cn";
strcat(dest, src);
puts(dest);
puts(src);


结果是:


abc.com.cn.com.cn
.com.cn.com.cn


原因是: dest并不是一个字符串,没有结束符,导致函数在执行的时候发生了不可预料的错误。

一定要注意字符串函数使用的前提是:所有变量是字符串!!!!


四、扩展字符串函数

字符串函数


2e11c15a4ff08a24bc5b5a7cb5c317a.png

字符函数


92b585473fde67821937050cf58f353.png

相关文章
|
存储 编译器 C语言
深度:用10000字总结了嵌入式C语言必学知识点
深度:用10000字总结了嵌入式C语言必学知识点
78 0
|
4天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
21天前
|
存储 人工智能 数据挖掘
Python编程入门:构建你的第一个程序
【10月更文挑战第22天】编程,这个听起来高深莫测的词汇,实际上就像搭积木一样简单有趣。本文将带你走进Python的世界,用最浅显的语言和实例,让你轻松掌握编写第一个Python程序的方法。无论你是编程新手还是希望了解Python的爱好者,这篇文章都将是你的理想起点。让我们一起开始这段奇妙的编程之旅吧!
20 3
|
11天前
|
存储 机器学习/深度学习 搜索推荐
Python编程入门:从零开始构建你的第一个程序
【10月更文挑战第32天】本文旨在通过浅显易懂的方式引导编程新手进入Python的世界。我们将一起探索Python的基础语法,并通过实例学习如何构建一个简单的程序。文章将不直接展示代码,而是鼓励读者在阅读过程中自行尝试编写,以加深理解和记忆。无论你是编程初学者还是希望巩固基础知识的开发者,这篇文章都将是你的良师益友。让我们开始吧!
|
3月前
|
存储 程序员 C语言
揭秘C语言:这些核心知识你掌握了吗?一篇文章带你突破编程基础,开启高效编码之旅!
【8月更文挑战第22天】C语言作为编程基石,以简洁高效著称,历经数十年仍备受欢迎。本文通过梳理C语言的核心概念,帮助读者深入理解并提升技能。适合各水平读者。基础语法从`main`函数开始,如示例中的“Hello, World!”程序所示。C语言强调头文件包含与语句结尾的分号。变量和数据类型丰富多样,如`int`、`float`、`char`等,合理选择可优化内存使用和性能。指针用于间接访问内存,是C语言的关键特性。控制结构如循环和分支使程序逻辑更灵活。函数支持代码复用与模块化。深入学习还需掌握预处理指令、文件操作等高级特性。通过系统学习与实践,你将能更熟练地使用C语言,构建高效稳定的应用。
61 4
|
5月前
|
安全 Linux 编译器
嵌入式C语言(十二)
嵌入式C语言(十二)
34 1
|
6月前
|
存储 小程序 程序员
嵌入式C语言基本操作方法之经典
嵌入式C语言基本操作方法之经典
100 0
|
存储 大数据 C语言
嵌入式C语言九大数据结构操作方式详解
嵌入式C语言九大数据结构操作方式详解
89 1
|
存储 C语言 索引
【从零开始的嵌入式生活】必备基础知识6——指针
【从零开始的嵌入式生活】必备基础知识6——指针
【从零开始的嵌入式生活】必备基础知识6——指针
|
Serverless
【从零开始的嵌入式生活】必备基础知识7——函数(2)
【从零开始的嵌入式生活】必备基础知识7——函数(2)
【从零开始的嵌入式生活】必备基础知识7——函数(2)