目录
总结:数组 p + n 指的是p向高地址移动 n*sizeof(类型)
一、指针定义
1.1、指针的概念
要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。
1.2、指针变量和指针的类型
指针变量就是一个变量,它存储的内容是一个指针。如果用前面的例子,可以理解为指针变量就是一张房卡,房卡存储了房间号的信息。
在我们定义一个变量的时候,要确定它的类型。int x、char ch、float在定义指针变量时也是一样的,必须确定指针类型。int 变量的指针需要用 int 类型的指针存储,float 变量的指针需要用 float 类型的指针存储。就像你只能用酒店 A 的房卡存储酒店 A 中房间号的信息一样。
二、图解一级指针 二级指针
三、解引用:
通过p找到a的地址进而访问a中存放的数据
四、指针的三种用法:
五、详解小段存放
5.1小段存放
写出交换函数(传入的参数为指针类型)
void Swap(int* p1, int* p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a = 1;
int b = 2;
Swap(&a, &b);
printf("交换后:%d %d \n", a, b);
return 0;
}
在调试窗口查看a b的内存高低
&a的地址
&b的地址
经过十六进制运算 80-74=C
可以清楚的看来
将低位数据(0d)存放到低地址位置
这钟存储方式称为小端存放
5.2验证小端存放:
int main()
{
int num = 0X12345678;
int* p = #
char* q = (char*)p;
printf("%x", *q);
}
(低位数据存放在低地址)
六、指针运算
6.1 指针加法
当指针P+1时 则P向后移动一个单元格大小
总结:数组 p + n 指的是p向高地址移动 n*sizeof(类型)
6.2 指针减减
两个同类型指针,指向连续空间可以相减。减后的结果是数据元素的大小。
七、关于*和&的谜题
如: int a =10; int *pa = &a;
假设有一个int类型的变量 a, pa是指向它的指针,那么*&a,和&*pa,*&pa分别是什么意思呢?
*&a可以理解为*(&a),&a表示取变量 a的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于*pa),绕来绕去,又回到了原点,*&a仍然等价于a
&*pa 可以理解为&(*pa),*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于&a),所以&*pa等价于pa。