C語言入門篇--變量的左值和右值
在看此塊內(nèi)容前可以先看看內(nèi)存及地址相關(guān)內(nèi)容,更容易理解。
1.普通變量
一個變量是有三個屬性:
1.變量的空間。
2.變量的內(nèi)容。
3.變量的地址。
空間即若干字節(jié),內(nèi)容即空間里放了什么,地址即變量對應(yīng)的空間地址。
#include <stdio.h>
int main()
{
int a = 10;//定義變量a,開辟4個字節(jié)的空間。
a = 20;//見下述文字解釋
int b = a;//見下述文字解釋
return 0;
}
一般對于一個變量而言在表達(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,見下述文字解釋
*p=20;//見下述文字解釋
int b = *p;//見下述文字解釋
return 0;
}
int *p = &a;
//初次定義指針變量p
p為左值,用的是p的空間,此處把a(bǔ)的地址寫入p的空間里,此時p指向a
如下圖

p指向a后,*p=20;和int b = *p; 兩處的*p代表的是a的空間或內(nèi)容,
即對指針進(jìn)行解引用(*p)代表指針?biāo)赶虻淖兞浚?/p>
此時*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);//此時*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;//見下述文字解釋
int *q= p;//見下述文字解釋
system("pause");
return 0;
}
p = &b;//p為左值,用p的內(nèi)容,此處把b的地址寫入p的空間,p指向了b,不指向a了。
int *q= p;//初次定義指針變量q,q為左值,用的是q的空間;
p為右值,用的是p內(nèi)容(p經(jīng)過p = &b;語句后,p中的內(nèi)容為b的地址)
此時指針變量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語言入門篇--變量的左值和右值的詳細(xì)內(nèi)容,更多關(guān)于C語言變量的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言單鏈表實(shí)現(xiàn)多項(xiàng)式相加
這篇文章主要為大家詳細(xì)介紹了C語言單鏈表實(shí)現(xiàn)多項(xiàng)式相加,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
C語言實(shí)現(xiàn)電腦關(guān)機(jī)程序
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電腦關(guān)機(jī)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02
c語言中malloc、realloc與calloc 的區(qū)別以及聯(lián)系
以下是對c語言中的malloc函數(shù),realloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進(jìn)行了介紹,需要的朋友可以過來參考下2013-08-08
C++實(shí)現(xiàn)將長整型數(shù)轉(zhuǎn)換為字符串的示例代碼
這篇文章主要介紹了C++實(shí)現(xiàn)將長整型數(shù)轉(zhuǎn)換為字符串的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
C++對象的淺復(fù)制和深復(fù)制詳解及簡單實(shí)例
這篇文章主要介紹了C++對象的淺復(fù)制和深復(fù)制詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04

