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

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

先看如下一段简单代码

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是一个地址,所以指针变量在此充当了右值,而作为右值时就一个值,一个数据,即地址,所以在这里指针变量又成了指针(难怪经常将指针变量和指针混为一谈)

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

猜你喜欢

转载自blog.csdn.net/kklovecode/article/details/131577481