有關左值和右值,個人一些見解,可能不對,但願大神們指正!

有關左值和右值,個人一些見解,可能不對,但願大神們指正!

在如今不少書籍上都會看到有關左值和右值的一些觀點, 可是真正可以理解其含義的好像不多。並且這些書籍上的說明都是以舉例子的方式來講明其概念的(至少我看見的書籍是這樣的)。這樣就沒有一個值得推敲的理論性的概念。根據我的的理解有以下的不成熟的概念,但願有識之士不要笑話(畢竟論壇這種東西是你們一塊兒討論的地方,我只是拋磚引玉。)
一個賦值語句左邊的東西是左值,右邊的東西是右值(這是不少書籍上的解釋好比《C和指針》)。可是等號左邊的東西到底是什麼?等號右邊的東西到底是什麼?要說明這個問題,先要知道一個變量的組成。變量是一段有名字的連續存儲空間。在源代碼中經過定義變量來申請並命名這樣的存儲空間,並經過變量的名字來使用這段存儲空間。 變量是程序中數據的臨時存放場所。在代碼中能夠只使用一個變量,也可使用多個變量,變量中能夠存放單詞、數值、日期以及屬性。根據老譚的那本書上面所說的(不少人認爲他的這本書太初級了,可是做爲入門書來講,寫的確實不錯。並且不少高深的理論都是基於最最初級的理論昇華的。)一個變量要有三部分:名字,特定屬性,存儲單元。「名字」很好理解,「特定屬性」就是變量存放的值,「存儲單元」就是存放值的那個空間。空間是有地址的,那麼地址是什麼?咱們的內存是一個一個的小格子(通俗一下哈),它們是連續的,若是cpu想找到某一個內存單元時就要從頭開始查找,那麼這個內存單元必需要有一個編號,這個編號就是地址。地址和變量的名稱是不同的(這裏沒有說函數,而是說變量,函數的地址和函數名稱是同樣的)。那麼一個賦值語句到底是怎樣的呢?
賦值語句的通常格式是:變量名=表達式 其中」=」爲賦值號。表達式是由文本、常數、變量、屬性、數組元素、其餘表達式或函數調用的任意組合所構成。右面表達式必定要有具體的數值的。數組


常見的賦值語句有如下幾種形式:

(1)a = 3;{賦予變量常數值}
(2)b = a + 1;{將含有其它變量的表達式賦予變量}
(3)N = N…
通俗的講:賦值的過程就是把一個變量名下的內存單元注入一個數值的過程。
因此, 左值就是變量名,而右值是一個帶有具體數值的表達式。markdown


下面的一段代碼:
int i;
    int a = 12;
    int *pi;
    pi = &i;
    *(pi++) = a;//該語句對嗎?換句話說:*(pi++)能夠做爲左值嗎?
那麼左面括號內的pi++的意義是什麼呢?pi = pi + (int *)1;
相關文章
相關標籤/搜索