指针和指针变量有何不同,为何混而一谈(根本是左值右值的区别)

文章探讨了C语言中指针和指针变量的概念,通过示例代码解释了指针变量作为左值(存储地址)和右值(传递值,即地址)时的不同。指针变量在赋值时可以代表内存地址(左值)或被赋值为另一个指针变量的值(右值,即地址)。这种双重特性导致了指针和指针变量经常被混淆。

指针和指针变量有何不同,为何混而一谈(根本是左值右值的区别)

先看如下一段简单代码

int x;
x = 100;
int y = x;

代码第二排x = 100是将100存进了x 的空间;y = x是将x的值存进了y
两者都是x,一个使用了空间,一个使用了值
所以我们能够得出
x = 100;用的是x 的空间,变量的属性,左值
int y = x;用的是x 的值,数据的属性,右值
所以变量是可以充当 左值,又可以充当 右值
通过一个简单的整型变量,接下来我们来说一说指针变量

#include<stdio.h>
int main()
{
	int* p = NULL;
	int* q = NULL; //先定义两个指针变量p,q
	int a = 10;
	p = &a; //a的地址赋值给p
	q = p;  //p的值赋值给q
	return 0;
}

首先一来先定义了两个变量p和q,首先p =&a ,a的地址赋给了p,其实内在含义是使用了p的空间,用的是空间,即左值,而之后q = p,是将变量p的值(也就是a的地址)赋给了q,用的是变量p的数据,即右值
所以如果指针变量就是指针,那么这里的p = &a,p就是一个指针,也就是地址,而地址是一个数据,数据本身是不能被赋值的,所以它一定是个变量,就是指针变量!,而q = p 这里的p是一个地址,所以指针变量在此充当了右值,而作为右值时就一个值,一个数据,即地址,所以在这里指针变量又成了指针(难怪经常将指针变量和指针混为一谈)

综上,之所以指针和指针变量经常被混淆,根本就是因为指针变量和其他变量一样,在同一个代码内,既可以当左值,又可以当右值,而当左值是,用的是他的空间,故是指针变量,而当右值是用的是他的数据值,故是指针。

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kklovecode

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

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

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

打赏作者

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

抵扣说明:

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

余额充值