C 語言中的左值和右值問題。 究竟是哪乙個先執行。 你想詳細說明一下嗎?

發布 科技 2024-06-25
18個回答
  1. 匿名使用者2024-01-29

    關鍵是:+ 運算只能應用於左值,不能應用於右值;

    前 ++ 結果仍然是左值,後驗 ++ 結果只是乙個右值。

    操作和指標指標操作是從右到左組合的二級操作。 因此,操作順序為:

    p++ = ++p++)

    1. p++,值為 str[0],則 p=&str[1]。

    2. (*p++) 為 str[0]。

    3. ++p++) 是 ++str[0],結果是 str[0]+1 ='h' + 1 = 'i',在這種情況下,p = &str[1]。

    由於二階運算是右連詞,因此 +p++)= ++p++) 與上述相同。

    和 ++p)++= ++p)++= ++str[0])+

    str[0]) 是乙個字元'h',並且 str[0] 的值為'i'

    在本例中,++str[0])+=++(字元'h'),+ 不能在非變數表示式之前使用,編譯錯誤!

    這是 ++ 運算子中的字首和後置詞與 C 中的左值和右值概念之間的區別。

    左值是可以賦值的表示式,而右值是正態表示式,通常用 l 值和 r 值表示。

    運算只能應用於左值,而不能應用於右值;

    同時,前 ++ 結果仍然是左值,後驗 ++ 結果只是乙個右值。 所以會有以下結果:

    例如,++(p)++ 中的第二個 ++ 作用於 (*p),這是乙個左值,因此它是正確的; 但是第乙個++作用於((*p)++,這是乙個右值,相當於((*p)+1),不能賦值,所以編譯錯誤。

    此外,任何左值在語法上都是正確的,使用字首 ++ 或--,重複的次數; 但是,如果 ++ 在之前和之後同時使用,則以後不能使用,因此 ++p++、p++ p--、p-- 形式的表示式將始終報告語法錯誤,因為 post-++ 或 -- 的結果不是左值。

    但是可以在左側多次使用它:++p = ++p))= 是'h'+2='j',是正確的表示式。

  2. 匿名使用者2024-01-28

    Left++ 在語句之前執行,right++ 在語句之後執行。

    假設 p=1;

    a=++p++;

    左++在語句執行之前執行,所以p在賦值a之前加1,所以a=2;Right++ 是在語句執行後執行的,所以 p 在賦值 a 後加 1,句子執行後 p=3

  3. 匿名使用者2024-01-27

    C語言的輸入引數是從右到左的,所以當引數放到堆疊中時,它們是LIN,先出。 這樣,第乙個引數可以先出來,所以 C 支援可變數量的引數,並且可以從左到右讀取引數。

    我似乎在 C 標準中沒有看到任何這些。 引數放入堆疊的方式應由作業系統實現,並由 gcc 等編譯器轉換為機器語言。

    作為一種跨平台的程式語言,它通常非常抽象,並試圖與底層解耦。 例如,在 C 標準文件中,位元組、位等的定義非常抽象,只是資料型別,與底層無關。

    左移是使用 C 中的“運算子”將乙個數字的所有位向左移動幾位。

    例如:int i = 1;

    i = i <<2;將 i 的值向左移動 2 位。

  4. 匿名使用者2024-01-26

    以下三個操作從右到左依次為。

    1次賦值,復合賦值;

    2.有條件操作;

    3 個單目操作員。

  5. 匿名使用者2024-01-25

    在一些特殊行動中。

    對於字元,它是從右到左計算的。

    這些運營商有:

    邏輯非運算子!

    按位否定運算子

    自動遞增運算子 ++

    自遞減運算元 --

    負運算子 -

    指標運算子*

    取位址運算子&

    長度運算子 sizeof

    型別轉換運算子(型別)。

    條件運算子? :

    賦值運算子 = += -= *= = %= >>= <<= &== |=

    你說的樓上的那個確實是右邊的那個,然後輸出。

    前幾天我在做問題時碰巧測試了它

    但它應該是輸出 1,1。

    首先是輸出,然後我自己新增。

    你可以在這個 printf 語句的末尾新增乙個 printf 函式輸出 i,你會發現它已經是 2。

    或者,如果將 i++ 更改為 ++i,則會發現輸出了兩個 2

  6. 匿名使用者2024-01-24

    一般是復合運算或自增自減運算。

  7. 匿名使用者2024-01-23

    我正在傾倒、、printf也是乙個函式。。。它與前面的**操作有什麼關係?。。。

    其實過了很久,我還是不明白從右到左操作是什麼意思......

  8. 匿名使用者2024-01-22

    左值是可用於向左分配值的表示式。 左值必須是可修改的,不能是常量。 我們使用變數作為左值,我們還可以看到指標和引用也可以是左值。 更改為 b=9-c。

    一般形式為:變數=表示式。 它的作用是將表示式的值分配給左值。

    計算賦值運算子右側的表示式值(“=”是賦值運算子),將賦值運算子右側的表示式值賦值給左側的變數,並使用賦值運算子左側變數的值作為表示式的值。

    例如:int a, b, c;

    a=3;b=4;

    c = ( a + b )*2*a - b) 得到 14

  9. 匿名使用者2024-01-21

    左值是賦值編號“=”左側的表示式。 左值必須是位址空間,並且必須是可以更改內容的位址空間。 A+B 表示的位址不確定。

    還有右值表示式。 通常所謂的a=8,其實就是把常量放到a對應的位址空間裡。 A 是位址 32 的別名,對應於堆疊上的記憶體空間。

    因此,a+b 不能將兩個位址空間相加為精確的位址空間,也不能用作左值。 A+B 可以用作右值,即將 A 和 B 中的內容值相加。

  10. 匿名使用者2024-01-20

    這意味著表示式的左側只能有乙個變數。

    現在很明顯,你的左邊有兩個變數,a 和 b。

    您可以命名另乙個變數 m=9

    然後將 a+b=9 更改為 m=a+b

  11. 匿名使用者2024-01-19

    也就是說,左邊的數字必須是粗略的,而且只能是一。

    例如,在 b+c=9 中,左邊不能有兩個糞便虛變數,這樣高平衡就錯了。 滿意。

  12. 匿名使用者2024-01-18

    左值,也就是可訪問儲存的區域,需要“可訪問儲存”,然後就可以改變,變數(很多型別)是,常數不是,可以據此判斷左值。

    一般來說,它是計算機的乙個可訪問和可儲存的區域,物件只是這個區域的抽象識別符號,變數a、b、*p等被計算在內,但根據不同的型別劃分了不同大小的區域。 識別符號可以任意給出,所以物件是什麼,太多了,無法一一列舉,還有物件型別,什麼int物件,char物件,指向影象等等。

    由於左值要求它是“可訪問和可儲存的”,因此可以找到它來更改它,這與區域的大小無關。 儲存區域的大小由型別決定(例如,我共享了多少記憶體),因為大小無關緊要,它與資料型別有什麼關係!

    有幾個運算子組成了可以被視為左值的表示式,但很少(例如,a++; a--;p 所以它們可以單獨設定,我對此了解不多,還有 sizeof(? 挖一塊? 大小的面積),其他的通常都看作是右值,因為表示式一般在末尾產生乙個不可變的值(比如a+b,最後的整個表示式代表乙個結果值,不可變的,它必須賦值給乙個儲存物件,即乙個左值),當然左值表示式可以做右值,它本來就有乙個值, 可以傳遞給其他人...

    我以前研究過左值,所以讓我們一起討論它們......

  13. 匿名使用者2024-01-17

    左值是雙目操作中位於運算子左側的表示式。

    左值的型別,具體取決於運算子的型別。

    區分雙目操作者,有以下要求:

    1 結構成員訪問,是的。 和 ->。 其中。 左值必須是結構變數,而 -> 要求左值必須是結構指標。

    2 個賦值類運算子,包括 =、+=、-=、*=、=、%=、&=、=、|=、<=、>=,左值必須是可以賦值的變數。 它不能是帶有運算子的表示式,也不能是常量。

    3 其他雙目運算元不需要左值,它們可以是任意表示式,只要它們有值即可。

  14. 匿名使用者2024-01-16

    變數是左值,因此可以將它們放在賦值語句的左側。 數值文字是右值,因此無法賦值。

    所以如果你看問題,你可以知道你不應該理解左值的概念。

    左值是可以出現在賦值語句左側或右側的內容。 也就是說,它必須是乙個變數,而不是資料型別或表示式。 變數是什麼資料型別並不重要。

  15. 匿名使用者2024-01-15

    typedef char vertextype[5];

    typedef vertextype selemtype;

    selemtype 屬於 char*

    typedef vertextype* selemtype;

    selemtype 屬於 char*

    s->top++ = e;

    S->top 屬於 char [5];

    e 屬於 char*

    更改後,兩邊都是 char 型別。

    s->top++ 的值為 char,然後指標增加 1

  16. 匿名使用者2024-01-14

    Lvalue:顧名思義,是等號左邊的值。 其實左值和右值是C++中比較基礎和嚴謹的概念(具體的完整定義是我自己查過的,我記不下來。 ),一般在外國人的書中提到,國內的渣滓書幾乎沒有這個詞。

    這是我自己的理解:事實上,左值是可以賦值的值,基本上是使用者定義的變數。 右值位於等號的右側。 它可以是變數或常量。

    例如,int a = 5; int b = a;

    A 和 b 是使用者定義的變數,可以隨意分配。 5 是文字常量。 您可以找到 a、b 的位址,例如 int* p = &a;

    但你不能解決 5. 例如,int *p = &5;

    此外,C++ Primer 提到字首 ++ 返回左值,字尾返回右值。 ++ 運算也可以通過左值和右值的概念來理解。 例如,++a = 10; 可以通過 (a++)= 10 編譯; 編譯錯誤。

    同樣,您不能對 (a++) 值進行定址。

    無法處理其他右值概念,例如函式的返回值。

    右值引用是 C++11 中的乙個概念,旨在解決上述函式返回值的問題。 例如,如果返回乙個可能包含許多元素的向量,則返回將生成乙個需要構造和溶解的臨時變數。 在現實中,你可能只寫向量 ret = getvector(); ret 本身需要從臨時返回值重新構造。

    產生廢物。 C++11 可以通過移動語義解決這種情況。 我不知道具體情況,但簡而言之,這是C++的新功能。

  17. 匿名使用者2024-01-13

    引用你被理解為乙個把柄,就像談論你的手機號碼和你們的關係一樣。

    電話號碼是您的參考,但不是您,但可以通過電話號碼找到您。

  18. 匿名使用者2024-01-12

    1. 例如:a[3] = 5; *p = 55;

    2、可以寫出非消耗量的變數空間,自然就是左值3。右值是指算術運算的常數或中間結果,只能讀出,不能寫,當然是右值。

    一般來說,左值可以作為右值使用,左值的原意是只寫的,右值的原意是唯讀的。

相關回答
8個回答2024-06-25

因為你把 char a='a',b='b';寫在外面,這樣,這兩個變數的範圍也更大。 >>>More

16個回答2024-06-25

如果是 x>y,則將其更改為 if(x>y),並將 else if 更改為 else >>>More

13個回答2024-06-25

您的程式有多個錯誤。 既然你是初學者,就得先把最基本的事情弄清楚,否則別人就不願意幫你了。 您的錯誤簡要列表如下: >>>More

12個回答2024-06-25

當然,如果將 p 替換為 int 指標,p++ 會一次跳轉 4 個字元位址。 >>>More

4個回答2024-06-25

沒錢。 以下是獲得已知財富價值的方法:

1 新使用者首次登入 5 完成賬號啟用; >>>More