指针解析 (*&p和&*p)

p指向a:p的值是a的地址

*的作用:

  1. 定义   (int* p----定义一个int类型的指针变量)
  2. 取地址对应的数据  (*p---获取*下的值(p的值)对应的值,即*(0x1000)=5)  

*&p和&*p的区别:

  *&p:

  • &p:获取p的地址,即0x1008
  • *&p:即*(0x1008),获取地址0x1008对应的值,即*&p=0x1000

  &*p:

  •  *p: p的值(0x1000)对应的值,即*p=5
  •  &*p:取p的值对应的值的地址,即5的地址,即0x1000

这里的 * 称为指针运算符,用来取得某个地址上的数据,请看下面例子:

例1:

#include<stdio.h>

int main() {
	int a = 15;
	int *p = &a;   //定义指针变量
	printf("%d, %d\n", a, *p);
	return 0;
}
//运行结果:15,15

 

 例2:

#include<stdio.h>

int main() {
	int a = 15, b = 99, c = 222;
	int *p = &a;   //定义指针变量
	*p = b;	//通过指针变量修改内存上的数据
	c = *p;	//通过指针变量获取内存上的数据
	printf("%d, %d, %d, %d\n", a, b, c, *p);
	return 0;
}
//运行结果:99,99,99,99

通过指针交换两个变量的值:

#include<stdio.h>

int main() {
	int a = 100, b = 999, temp;
	int *pa = &a, *pb = &b;
	printf("%d, %d\n", a, b);

	/***开始交换***/
	temp =*pa   //将a的值先保存起来
	*pa =*pb   //将b的值交给a
	*pb = *temp   //再将保存起来的a的值交给b
	printf("%d, %d\n", a, b);
	return 0;
}
//运行结果:
a = 100, b = 999
a = 999, b = 100

 

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值