c++中*p=a和p=&a的区别

大学初学指针的时候,时常懵逼,有时候觉得自己已经掌握了,但是一看复杂的程序和源码里的指针用法,就又蒙了,以至于谈指针色变。至于二级指针,数组指针、指针数组、函数指针什么的更是被吓懵。现在来逐个击破他们,为我们的编程道路扫清阻碍。

首先需要明白一点的是,指针是个变量,它和int类型、float类型等的变量一样,也存储在内存中,占据一定的字节。只是int变量存储的是整形数字,而指针变量存储的是地址,掌握了这点,攻破指针就指日可待了。

假设存在一个int类型的变量a,一个指向int类型的指针p。

现在来*p=a和p=&a的区别。先分析*p=a,这是一个赋值操作。这里可以把*p当成另外一个int b变量。b=a,是不是就很熟悉了。所以*p=a表示把a的值赋值给p所指向(存储)的内存地址。

再分析p=&a。这里就很好理解了,把a的地址,赋值给p。即p指向(存储)了a的地址。

结合实际例子分析:

运行环境:VS2013,语言:C++。

#include <iostream>
 
using namespace std;
 
int main()
{
	int a = 2;
	int *p = &a;
	printf("%d\n", *p);

	int *PA = new int;
	cout << "PA 地址=" << PA << endl;
	*PA = a;
	cout << "*PA=" << *PA << endl;
	cout << "PA 地址=" << PA << endl;	//地址不变

	cout << "------------我是分割线------------" << endl;

	int *PB = NULL;
	/*如果使用PB = &a后,对PB进行delete会报错,
	因为PB已经指向a的地址,对a进行delete操作,是不行的。
	但是不delete又会内存泄漏,所以用空指针指向a。
	*/
	//int *PB = new int; 
	cout << "PB 地址=" << PB << endl;	
	PB = &a;
	cout << "*PB=" << *PB << endl;
	cout << "PB 地址=" << PB << endl;	//地址变了

	delete PA;     //记得用delete释放指针PA占用的内存 
	PA = NULL;     //然后使指针指向空

	//delete PB;		
	//PB = NULL;

	getchar();
 

    return 0;
}

输出:

二者区别:

*PA=a;     表示把a的值赋值给PA所指的内存地址,PA本身没变。

PB=&a;    表示指针PB指向变量a的地址,PB本身变了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值