C語(yǔ)言入門(mén)篇--變量的左值和右值
在看此塊內(nèi)容前可以先看看內(nèi)存及地址相關(guān)內(nèi)容,更容易理解。
1.普通變量
一個(gè)變量是有三個(gè)屬性:
1.變量的空間。
2.變量的內(nèi)容。
3.變量的地址。
空間即若干字節(jié),內(nèi)容即空間里放了什么,地址即變量對(duì)應(yīng)的空間地址。
#include <stdio.h> int main() { int a = 10;//定義變量a,開(kāi)辟4個(gè)字節(jié)的空間。 a = 20;//見(jiàn)下述文字解釋 int b = a;//見(jiàn)下述文字解釋 return 0; }
一般對(duì)于一個(gè)變量而言在表達(dá)式中的位置就決定了 使用的是變量的空間還是內(nèi)容:
a = 20;//a為左值,用的是a的空間,把20放到a的空間里。
int b = a;//a為右值,用的是a的內(nèi)容,把a(bǔ)的內(nèi)容放到b里。
2.指針變量
看之前可以先看看指針變量有關(guān)內(nèi)容。
2.1初步理解
#include <stdio.h> int main() { int a = 10; int *p = &a;//p指向a,見(jiàn)下述文字解釋 *p=20;//見(jiàn)下述文字解釋 int b = *p;//見(jiàn)下述文字解釋 return 0; }
int *p = &a;
//初次定義指針變量p
p為左值,用的是p的空間,此處把a(bǔ)的地址寫(xiě)入p的空間里,此時(shí)p指向a
如下圖
p指向a后,*p=20;和int b = *p; 兩處的*p代表的是a的空間或內(nèi)容,
即對(duì)指針進(jìn)行解引用(*p)代表指針?biāo)赶虻淖兞浚?/p>
此時(shí)*p就是a,但具體用的是變量a的空間還是內(nèi)容取決于它是左值還是右值。
*p=20;//*p為左值,即a為左值,所以用的是a的空間,此處把20放入a的空間。
int b = *p//*p為右值,即a為右值,所以用的是a的內(nèi)容,此處把a(bǔ)的內(nèi)容放入b的空間。
#include <stdio.h> int main() { int a = 10; int *p = &a;//p指向a printf("a的地址=%p,\n", &a); printf("a的內(nèi)容=%d,\n", a); printf("p的內(nèi)容=%p,\n", p); printf("p指向的內(nèi)容=%d,\n", *p);//此時(shí)*p為右值,即用a的內(nèi)容 printf("\n"); *p = 20; printf("a的內(nèi)容=%d,\n", a); printf("\n"); int b = *p; printf("a的內(nèi)容=%d,\n", a); printf("b的內(nèi)容=%d,\n", b); return 0; }
2.2深入理解
當(dāng)p指向a后,*p就相當(dāng)于a,但指針變量p還是p,有其自己的空間和內(nèi)容。
#include <stdio.h> int main() { int a = 10; int b = 20; int *p = &a;//p指向a p = &b;//見(jiàn)下述文字解釋 int *q= p;//見(jiàn)下述文字解釋 system("pause"); return 0; }
p = &b;//p為左值,用p的內(nèi)容,此處把b的地址寫(xiě)入p的空間,p指向了b,不指向a了。
int *q= p;//初次定義指針變量q,q為左值,用的是q的空間;
p為右值,用的是p內(nèi)容(p經(jīng)過(guò)p = &b;語(yǔ)句后,p中的內(nèi)容為b的地址)
此時(shí)指針變量p和q中的內(nèi)容為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的內(nèi)容=%d\n", b); printf("p指向的內(nèi)容=%d\n", *p); printf("q指向的內(nèi)容=%d\n", *q); return 0; }
以上就是C語(yǔ)言入門(mén)篇--變量的左值和右值的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言變量的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談C#中List<T>對(duì)象的深度拷貝問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談C#中List<T>對(duì)象的深度拷貝問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01Qt實(shí)現(xiàn)簡(jiǎn)單動(dòng)態(tài)時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡(jiǎn)單動(dòng)態(tài)時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07c語(yǔ)言實(shí)現(xiàn)的hashtable分享
哈希表效率高,眾所周知。應(yīng)用廣泛,php中大部分存儲(chǔ)使用的都是hashtable,包括變量,數(shù)組…如何使用c語(yǔ)言實(shí)現(xiàn)hashtable呢,現(xiàn)提供自己的思路,如有不妥之處,敬請(qǐng)賜教2014-01-01C語(yǔ)言壓縮文件和用MD5算法校驗(yàn)文件完整性的實(shí)例教程
這篇文章主要介紹了C語(yǔ)言壓縮文件和用MD5算法校驗(yàn)文件完整性的實(shí)例教程,這里演示了Windows下將文件壓縮為7z格式以及MD5檢驗(yàn)文件和密碼的方法,需要的朋友可以參考下2016-04-04