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个,刚好)
结论:为了避免数据引用错误,所以定义什么类型的指针变量,就应该指向什么类型的数据。
|
|