1、字符串及字符数组 1) 什么是字符,字符串? 'a' 字符常量 "a" 字符串常量
2)在C语言中存储字符串特点 "abc"多拿出一个空间存储字符串的结束符 '\0'
3) 字符数组 1) 定义 char 数组名[长度] char c[10]; char 数组名[第一维][第二维]
2)初始化 同普通一维数组的初始化 char str[10]={"abc"}; // strlen 3 sizeof(str) 10 char str[]={"abc"}; // strlen 3 sizeof(str) 4 char str[]="abc"; // strlen 3 sizeof(str) 4
3)访问 同普通一维数组的访问一致, 数组名[下表]
2、字符串的存储 字符串用字符数组存储。
字符数组和普通数组的差异 初始化: char a[5]={"ABC"}; a[0]='A' a[1]='B' a[2]='C' a[3]='\0' a[4]='\0' char s1[]={"afadsfasfa"}; char s2[]="xxxx";
3、字符串的结束符'\0'注意事项 char s3[3]={'a','b','c'}; //用字符数组存字符 char s4[2]={'b','c'};
%s :用来输入输出字符串。 %s特点:遇到'\0'就结束,否则停不下来,直到遇到'\0' printf("%s",s4); //bcabc
%s 接收键盘输入 char ch[10]; scanf("%s",ch); //输入字符串的时候不能有空格 //aaaaaaaaaab ,输入的长度>数组长度,不安全的
4、什么是地址? 计算机为了管理内存单元,给每个字节都进行编号,这个编号的就是地址 就相当于房间的编号。
5、什么是指针? 地址就是指针 变量访问的方法:直接访问 间接访问 1)直接访问:用变量名访问其代表的存储空间 2)间接访问:通过内存地址访问地址所对应的存储单元的内容
6、指针和变量之间的关系 指针可以间接的访问变量的值 1)指针变量:就是用来存放地址的变量 指针变量也遵守变量使用的规则 :先定义 --->初始化 -->使用
2)如何定义一个指针变量 数据类型* 指针变量名; int *p;
3)指针变量初始化 为什么要进行初始化? 首先,如果普通的一个变量没有初始化,会有什么后果? //垃圾值 对于指针变量,int *p; 定义之后,没有初始化称谓:野指针 *p = 10; //如果不初始化直接使用,可能会导致系统崩溃
(1)定义的同时进行初始化 int *p=NULL;//赋值为NULL ,表示谁都不指 int *p1 = 0; //同上
int a=10; int *p2=&a; int *p3=&a; int *p4 = p2; p3 = p4; //指针的指向可以改变
(2)先定义,后出初始化 int *p; p = NULL; int *p1; p1=&a;
注意: 1)多个指针可以指向同一个变量 2)指针的指向是可以改变的 3) int *p; p = 100;//错误的 存放的时地址,现在给的时整数值 4)*p = &a;错误 //*p是整型的变量,只能赋值数值
int *p = &a; *p 就是访问p中存放的地址代表的存储空间的值 p指向的存储空间的值
7、指针的应用场景 1)在被调函数中,修改主调函数的变量值 2)可以让函数有多个返回值
8、多级指针介绍 什么是多级指针? 答: 二级及以上的指针称谓多级指针。
一级:指针指向的是一个基本数据类型变量的地址 二级:指向的又是一个指针变量的地址
int a = 10; int *p = &a; //p是一级 int **p1 = &p; //p1 ---> p p1是二级指针变量
9、指针变量为什么要区分类型 前提:不同类型的指针变量在内存中占用8个字节 为什么都占用8个字节还要区分类型呢?
int a=10; char *c = &a; //从变量a的首地址开始,取了1个字节(实际4个,取少了) double *c2 = &a; //从变量a的首地址开始,取了8个字节(实际4个,取多了) Int *c3 = &a; // 从变量a的首地址开始,取了4个字节(实际4个,刚好)
结论:为了避免数据引用错误,所以定义什么类型的指针变量,就应该指向什么类型的数据。
|