1、字符串
用“”引起来的内容,就是字符串。
在C语言中有没有专门的字符串的变量? 没有
所以我们使用字符数组来存储字符串。(把字符串的每一个字符存储到字符数组的每一个元素中,并且会多存放一个‘\0’)
‘\0‘ 字符串的结束标记,ascII码表中值是 0 对应的字符。NUT,NULL
2、字符数组
1)定义
char 数祖名[长度];
char str[200]; 表示定义一个长度为200的字符数组,如果用来存储字符串,则字符串的最大长度是199,留出一个给‘\0‘
char str[3]={‘a‘,‘b‘,‘c‘}; //不能以%s进行输出
2)初始化
(1)完全初始化
char str[3]={‘a‘,‘b‘,‘c‘};
(2)部分初始化
char str[3]={‘a‘,‘b‘};
(3)用字符串进行初始化
char str[10]="itcast"; //占用了7个字节因为‘\0‘占用了一个
char str[10]={"itcast"};
3)字符数组的引用
如果把字符数组的内容逐个取出,str[0]、str[1]....str[n-1];
%s 字符串的格式控制符把字符数组整体进行输出
%s 给一个字符数组的首地址,系统会自动从首地址开始连续读取直到遇到‘\0‘结束
4)存储细节
字符数组存储的细节:
连续的一片存储区域(地址是连续的),每个字符占用1个字节
计算字符数组(字符串)的长度
针对这种定义方法,求长度(会包含‘\0‘):char str[]="abc"; //4
sizeof(str)/sizeof(char) = sizeof(str);
strlen也可以计算字符串的长度(不包含‘\0‘):
strlen(str); //3
3、字符数字和普通数组的区别
char str[]; //只能存字符型数据
int arr[]; //只能存整型 数据
4、常见的字符串函数6个
gets(数组名) 表示获取从键盘数输入的字符串(可以接收空格)
puts(数组名) 表示讲数组的内容输出到控制台(可以自动换行)
strcat(数组名1,字符串) 表示把字符串链接到数组1中(回覆盖数组1的\0)
strcpy(数组名1,字符串) 表示把字符串拷贝到数组1中,会覆盖数组1中原有的内容
strcmp(字符串1,字符串2) 比较两个字符串的大小
字符串1>字符串2 >0
字符串1<字符串2 <0
字符串1==字符串2 ==0
strlen(数组名) 计算字符串的长度(不包括\0)
5、什么是地址?什么是指针?
内存被操作系统划分了若干个存储单元,每个单元是1个字节(8位)
每个字节都有字节的地址,这个地址就叫指针。
地址和内存单元是两个不同的概念
地址是内存单元的编号
内存单元是地址对应的实际存储内容。
6、指针变量
用来存放地址的变量,就称为指针变量
1)定义
数据类型 *指针变量名 ; //指针变量是个变量,指针是常量
"*" 在两个场合起作用:
定义指针的时候使用 int *a; // *表示定义一个指针变量
在指针对应的存储单元内容的时候用 *a //表示获取指针变量中存放的地址所对应的存储内容
2)初始化
指针定义完成以后,要初始化,如果不初始化,则这个指针成为野指针
可以用NULL 也可以用 0 进行初始化,表示这是一个空指针,什么也不指。
正常情况下的初始化
int a;
int *p1 = &a;
3)访问方法
*指针变量 //表示获取指针变量中存放的地址所对应的存储单元的内容
7、指针的使用场景
1)间接修改变量的值
8、多级指针
指针的指针
9、指针为什么要区分类型
1)数据有不同类型,要指向不类型的数据也需要不同的指针
2)指针是一个地址,*指针变量 不知道取多少个字节的内容