C语言学习笔记5
一、综述昨天学习了字符串但是因为时间太晚没有写博客今天补上。二、正文1字符串的定义1、概述字符串算是比较复杂的一块知识首先字符串的定义是包含一组同一类型的数据的合集数组可以存放一个或多个数据但是数量不能为0数组可以包含多个数据但是类型需要相同。2、字符串的初始化字符串的初始化分为完全初始化和不完全初始化。#includestdio.h int main() { int arr[10] {0} ; int arr1[5] {12345} ; int arr2[] {12345}; return 0 ; }其中arr属于不完全初始化数组名后面的[]中的数字表示字符串的长度arr的长度为10但是只使用了0进行初始化。arr1属于完全初始化因为arr1的字符串长度为5里面放了1,2,3,4,5进行了完全初始化。arr2也属于完全初始化因为arr2没有指定字符串长度但是后面输入了,1,2,3,4,5进行初始化系统会自动将arr2的字符串长度设置为5.3、字符串的结束关于字符串还有个知识点是字符串中默认会在结尾加一个\0来表示字符串的结束如果没有\0则会导致系统错误识别字符串导致输出乱码。#includestdio.h int main() { int arr[3] {1,2,3} ; printf(%s , arr) ; return 0 ; }上面这段代码的输出结果就是在3后面会出现乱码因为系统只能读到3但是后面没有\0作为结束标志系统会试图读取一个字符但是因为没有给定所以系统会随机读取在不同的系统上会有不同的乱码样式但是总归是一种错误的写法。4、字符串的长度另外要说一下字符串的长度字符串的长度通常用sizeof来进行计算sizeof(arr)计算的就是字符串总共有多长sizeof(arr[0])则是计算字符串中单个字符的长度。因为字符串不止一种类型字符串可以是任意类型的所以如果需要计算字符串总共有多少个字符的话可以用sizeof(arr)/sizeof(arr[0])来进行计算[0]中的0可以替换为任意数字并不会影响计算结果。strlen也是用来计算字符串长度的但是strlen会将\0也计算到字符串的长度中sizeof则会在读到\0的时候忽略\0并计算结果。5、输出字符输出指定字符需要指定字符的下标才可以字符的下标会从0开始计算例如#includestdio.h int main() { int arr[] {123456} ; printf(%s , arr); printf(%d , arr[1]); return 0 ; }这段代码的输出结果为1234562因为%s输出的是整个字符串所以会把123456这几个在字符串里的字符全部输出2则是因为arr[1]表示输出字符串中第二个字符而第二个字符是2.2、字符串的维度1、维度讲解字符串分为一维字符串二维字符串多维字符串一维字符串就是最基本的字符串只有一组字符串。二维字符串就是包含两个字符串的字符串。多维字符串即为包含两个或以上二维字符串的字符串统称多维字符串。#includestdio.h int main() { int arr[] { 0 } ; int arr1[] { 0 } ; int arr2[] {arr,arr1} ; int arr3[] {arr,arr1} ; int arr4[] {arr2,arr3} ; return 0 ; }这当中arr、arr1为1维数组arr2、arr3为二维数组、arr4为多维数组。2、二维数组的初始化及输出#includestdio.h int main() { int arr[2][3]{1,2,3,4,5,6}; int arr1[2][3]{123,456}; printf(%s , arr ); printf(%d , arr1[1][1]); return 0 ; }二维数组的初始化需要先确定列数及第一个[]再确定行即第二个[]列可以不用给定但是行必须给定每行确定是多长以后如果初始化所用的字符超出则会自动放到下一行中但是如果不给定每行多长则会报错。初始化可以使用第一种方式及每个字符中间用隔开也可以使用第二种将两串字符串用包裹“”分隔也是可行的。字符串的输出则是使用%s进行输出表示输出字符串%c是输出单个字符想要输出二维数组中的特定位置的字符时需要指定行和列才可以精准输出。如上面的代码printf(%d , arr1[1][1]);的输出结果就是5因为5是第2行第2个字符。