指针和指针变量有何不同,为何混而一谈(根本是左值右值的区别)
先看如下一段简单代码
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是一个地址,所以指针变量在此充当了右值,而作为右值时就一个值,一个数据,即地址,所以在这里指针变量又成了指针(难怪经常将指针变量和指针混为一谈)