【c/c++夯基】指针,辨别*p=&a; p=&a; *p=a;

先说题目指出的三个语句的结果。

*p=&a;错误写法
p=&a;正确,把变量a的地址赋给指针p;
*p=a;正确,把变量a的值赋给指针p指向的地址的内容;

来详细看看为什么。

#include <iostream>
using namespace std;
int main()
{
    int a=10;
    int *p=&a; //定义一个(int型)指针变量
    
    cout<<"*p:"<<*p<<endl;
    
    *p=*p+1;
    cout<<"*p:"<<*p<<endl;

    return 0;
}

其中,int *p=&a;
*p就是取变量a的内容,即x=*p;等价于x=a;
&a就是取变量a的地址

部分初学者可能会有以下的错误赋值想法:

	int a=10;
    int *p;
    *p=&a;

认为 *p是存放变量a的内容,所以把&a(也就是a的地址)存放在 *p中啊,而且写法跟上文并无不同,为什么会是错的呢?难道指针必须在初始化阶段赋值?

首先,赋值方法是错误的

这里有一个盲点。
初学者在学习其他变量时,会注意到声明了什么变量,在之后使用的时候变量名和定义时的变量名是一样的,比如:

	int a;
	float b;
	char c;
	a=10;
	b=1.01;
	c='c';

但是,在指针这里出现了一个与众不同的存在——声明符*,因此,我们虽然定义了一个写成*p的指针变量,但在使用的时候并不能把它看成一个不可分割的整体。(一开始学的时候很可能会拐不过弯来)

int *p;在这里定义了一个int型指针对吧?
但写成这样可能更会让初学者理解——int* p;
——定义了一个指针,指针变量名是p!不是*p

P.S.以上两种写法是一样的,但是声明符*最好紧跟着变量名。

要知道,当定义了一个变量,就会开辟一个内存,包括变量的地址和变量的值,而定义的指针也同样,只不过指针变量的值就是要指向的变量的地址

指针的值叫做指针,他是一个内存地址,是一个数据。
指针变量是一个空间,他有自己的地址。

至于指针是否需要开辟内存,主要取决于指向的空间本身是否有内存。

现在再来看,p是我们定义的指针;p=&a;就是把变量a的地址存在p中;想要通过指针来调用变量a的内容,就使用*p

也能看出来*p=&a;这个明显的错误:这条语句在试图把变量a的地址赋值给变量a的内容!

最后,我们已经知道了是赋值的错误,就不是指针必须在初始化阶段赋值啦!

最近复习数据结构,记录一下有些会混淆/不太清楚的知识点,如果发现有内容错误处,评论指出,教学相长,感激不尽。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆浆两块钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值