指针基础详解 一

目录

一、指针定义

二、图解一级指针 二级指针

三、解引用:

四、指针的三种用法:

五、详解小段存放

5.1小段存放

这钟存储方式称为小端存放

5.2验证小端存放:

 ​编辑(低位数据存放在低地址)

六、指针运算

 总结:数组  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。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值