目录1.普通变量2.指针变量2.1初步理解2.2深入理解
在看此块内容前可以先看看内存及地址相关内容,更容易理解。
1.普通变量
一个变量是有三个属性:
1.变量的空间。
2.变量的内容。
3.变量的地址。
空间即若干字节,内容即空间里放了什么,地址即变量对应的空间地址。
#include <stdio.h>int main(){int a = 10;//定义变量a,开辟4个字节的空间。a = 20;//见下述文字解释int b = a;//见下述文字解释return 0;}
一般对于一个变量而言在表达式中的位置就决定了 使用的是变量的空间还是内容:
a = 20;//a为左值,用的是a的空间,把20放到a的空间里。int b = a;//a为右值,用的是a的内容,把a的内容放到b里。
2.指针变量
看之前可以先看看指针变量有关内容。
2.1初步理解
#include <stdio.h>int main(){int a = 10;int *p = &a;//p指向a,见下述文字解释*p=20;//见下述文字解释int b = *p;//见下述文字解释return 0;}
int *p = &a;
//初次定义指针变量p
p为左值,用的是p的空间,此处把a的地址写入p的空间里,此时p指向a
如下图
p指向a后,*p=20;和int b = *p; 两处的*p代表的是a的空间或内容,
即对指针进行解引用(*p)代表指针所指向的变量,
此时*p就是a,但具体用的是变量a的空间还是内容取决于它是左值还是右值。
*p=20;//*p为左值,即a为左值,所以用的是a的空间,此处把20放入a的空间。
int b = *p//*p为右值,即a为右值,所以用的是a的内容,此处把a的内容放入b的空间。
#include <stdio.h>int main(){int a = 10;int *p = &a;//p指向aprintf("a的地址=%p,\n", &a);printf("a的内容=%d,\n", a);printf("p的内容=%p,\n", p);printf("p指向的内容=%d,\n", *p);//此时*p为右值,即用a的内容printf("\n");*p = 20;printf("a的内容=%d,\n", a);printf("\n");int b = *p;printf("a的内容=%d,\n", a);printf("b的内容=%d,\n", b);return 0;}
2.2深入理解
当p指向a后,*p就相当于a,但指针变量p还是p,有其自己的空间和内容。
#include <stdio.h>int main(){int a = 10;int b = 20;int *p = &a;//p指向ap = &b;//见下述文字解释int *q= p;//见下述文字解释system("pause");return 0;}
p = &b;//p为左值,用p的内容,此处把b的地址写入p的空间,p指向了b,不指向a了。
int *q= p;//初次定义指针变量q,q为左值,用的是q的空间;
p为右值,用的是p内容(p经过p = &b;语句后,p中的内容为b的地址)
此时指针变量p和q中的内容为b的地址,即指针变量p和q均指向b。
#include <stdio.h>int main(){int a = 10;int b = 20;int *p = &a;p = &b;int *q= p;printf("b的内容=%d\n", b);printf("p指向的内容=%d\n", *p);printf("q指向的内容=%d\n", *q);return 0;}
以上就是C语言入门篇–变量的左值和右值的详细内容,更多关于C语言变量的资料请关注其它相关文章!
也许不是自己该去发挥的地方,还是让自己到最适合自己战斗的方面去吧!勇敢的接受自己的失败,