第七天
好多学生都认为C语言中指针是最难的,在我看来,并没有想象的那么难,希望读者不要害怕指针。
指针:
地址从内存分配什么地址?一个地址就是一个编号,编号和编号之间相差一个字节,如果地址需要存储占用4个字节
什么指针? 指针常量和指针变量
指针常量就是地址编号
指针变量就是存放地址编号的变量
通常直接将指针常量和指针变量简称为指针。
如何定义指针变量。
xxx *p;
xxx代表了一个数据类型
int a = 10;
int *p = &a; *和int结合构成了一个指针类型叫做int *
*p = 20;本质修改了a的内容
操作的是指针变量指向的空间内容(一个空间包含多个地址编号,其中第一个地址编号就可以被称为指向了这个空间,
指针变量存放空间首地址编号,所以也可以直接描述为指针变量指向了这个空间)。
算数运算符:+ - ++ --
int a = 10;
int *p = &a;
p + 1跳过的字节数和p指向的空间的类型相关
*p ++ 打印结果为10 p指向偏移了
(*p)++ 单纯打印也是10 p指向没有改变
int *p;叫做野指针
int a = 0x12345678;
char *p = (char *)&a;
*(p + 1) 获取了 0x56
*(p + 3) 获取了 0x12
一级指针和一维数组的关系
数组名是一个常量地址
int a[5] = {a[0],a[1],a[2],a[3],a[4]};
//int *p1 = &a[0];
//int *p2 = &a[1];
int *p = a;
p + i <==> a + i
*(p + i) <==>