国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言辨析——int a=5;為什么++a=1能編譯通過而a++=1不行呢?

這篇具有很好參考價值的文章主要介紹了C語言辨析——int a=5;為什么++a=1能編譯通過而a++=1不行呢?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 問題

有人問:int a=5; 為什么++a=1能編譯通過a++=1編譯錯誤呢?

解釋:不管是++a=1還是a++=1在C編譯環(huán)境下都無法編譯通過,但在C++中,++a=1可以編譯通過,而a++=1無法編譯通過,這也是C和C++的一個不同。因此,這是一個關于C++的問題。

2. 分析

不管是C還是C++,語句a++=1;的行為是未定義的,因為它違反了“如果在沒有序列點的表達式中多次修改同一標量的行為是未定義行為”。

對于++a=1,等效于(a+=1)=1,對于C而已?(a+=1)不是左值,因此不能將1賦值給++a。因此,在C中編譯通不過,給出的錯誤信息是:

[Error] lvalue required as left operand of assignment

但對于C++而言,表達式++a=1是正確的,因為++a在C++ 標準中是左值,因此,語句++a=1;在C++中是正確的語句。雖然該語句在C++中是正確,但不建議這樣寫。

表達式a++=1在C或C++中都是錯誤的,因為它試圖兩次修改同一個對象,這是不允許的。討論這個話題就像討論一個錯誤的時鐘在一個小時后的時間是多少而已。

注:左值(Ivalue)這個詞最初源自賦值表達式E1=E2,其中左操作數(shù)E1必須是(可修改的)表達式。對象(object)是一塊內(nèi)存區(qū)域,可以讀取它的值或者向它存儲數(shù)據(jù)。一般將左值視為對象的“定位值(locator value)”,即左值是一種表達式,可以通過它讀取或修改它所引用的對象。例如,表達式a和b都是左值,但表達式3和b+3都不是左值。再如,若一元表達式E是一個指向對象的指針,則*E是一個左值,表示E指向的對象。

C99左值的定義是:左值是具有對象類型非void的不完整類型的表達式,如果左值在求值時沒有指定對象,則其行為是未定義的。

C11起左值的定義是:左值是一個表達式,該表達式潛在地指示一個對象,且該對象類型不是void,如果左值在求值時沒有指定對象,則其行為是未定義的。

3. 進一步分析

在C標準中,由自增和自減運算符構成的表達式是右值(在C標準中,有時把右值(rvalue)描述為表達式的值),但在C++中,前綴形式的運算符構成的表達式是左值。因此,在C語言中,即a++和++a不是左值而是右值,因此無法為它們賦值。而在C++ 中++a是左值,因此可以給++a賦值,這就是為什么在C++中語句++a=1;?能編譯通過的原因。

注:在C標準中,賦值和復合賦值運算符構成的表達式是右值,但在C++中是左值。例如?表達式(a=3*4)=5+6在C中是錯誤的,但在C++ 中是正確的。對于表達式a=3*4來說,在C中不是左值,因此不能將表達式5+6賦值給它,但在C++ 中它是左值,因此,可以將5+6賦值給(a=3*4)。

4. 經(jīng)驗

如果一個變量出現(xiàn)在一個函數(shù)的多個參數(shù)中,不要對該變量使用遞增或遞減運算符。

如果一個變量多次出現(xiàn)在一個表達式中,不要對該變量使用遞增或遞減運算符。

C語言學習50

C語言學習 · 目錄

上一篇C 語言基本概念----序列點下一篇C語言辨析——深入理解格式字符的用法文章來源地址http://www.zghlxwxcb.cn/news/detail-792929.html

到了這里,關于C語言辨析——int a=5;為什么++a=1能編譯通過而a++=1不行呢?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 算法| Java的int類型最大值為什么是21億多?

    算法| Java的int類型最大值為什么是21億多?

    本文主要介紹在 Java 中,為什么 int 類型的最大值為 2147483647 。 我們都知道在 Java 中, int 的長度為32位。 理論上,用二進制表示,32位每一位都是1的話,那么這個數(shù)是多少呢? 我們來計算一下,第0位可以用20^00表示,第1位可以用21^11表示,第31位可以用231表示,那么32位二進

    2024年02月04日
    瀏覽(19)
  • int和Integer的區(qū)別,Java為什么要設計包裝類呢?

    1.默認值不同 作為成員變量來說,int的初始默認值為 0 ,而Integer為 null 。 2.存儲的內(nèi)存位置不同 Integer是一個類,其對象存儲在 堆 內(nèi),int是基本數(shù)據(jù)類型,存放在 棧 中。 3.作用不同 Integer類里面封裝了很多的屬性以及方法,使用起來會更加的 靈活 。 Java為什么要設計基本類

    2024年02月13日
    瀏覽(16)
  • 【C語言】scanf和strcpy這類關鍵字和函數(shù)為什么不安全,使用VS編譯會報錯

    【C語言】scanf和strcpy這類關鍵字和函數(shù)為什么不安全,使用VS編譯會報錯

    首先先說解決方法: 在程序最頂端加入這個代碼段 這主要是微軟的 C 運行時庫實現(xiàn)將這些函數(shù)標記為不安全,主要原因是這些函數(shù)缺乏對輸入長度的邊界檢查,容易導致緩沖區(qū)溢出漏洞。 會產(chǎn)生這樣的報錯: 即: C4996?? ?\\\'strcpy\\\': This function or variable may be unsafe. Consider usin

    2024年02月14日
    瀏覽(21)
  • 為什么要交叉編譯?

    1、什么是交叉編譯? 交叉編譯:是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。比如 我們在 x86 平臺上,編寫程序并編譯成能運行在 ARM 平臺的程序,編譯得到的程序在 x86 平臺上是不能運行的,必須放到?ARM?平臺上才能運行。 我們在Windows上面編寫C51代碼,并編譯成可執(zhí)

    2024年02月03日
    瀏覽(20)
  • Mybatis為什么需要預編譯等一系列問題

    SQL 預編譯是一種提高數(shù)據(jù)庫訪問效率的技術,它通過將 SQL 語句預編譯并存儲在數(shù)據(jù)庫中,減少每次執(zhí)行時需要進行解析和編譯的開銷,從而提高數(shù)據(jù)庫訪問的效率。 在預編譯階段,SQL 語句會被解析并轉換為可執(zhí)行的二進制代碼,然后存儲在數(shù)據(jù)庫中。當需要執(zhí)行該 SQL 語句

    2024年02月10日
    瀏覽(25)
  • 預編譯為什么能防止SQL注入?一看你就明白了。預編譯原理詳解

    預編譯為什么能防止SQL注入?一看你就明白了。預編譯原理詳解

    「作者主頁」: 士別三日wyx 「作者簡介」: CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡安全領域優(yōu)質(zhì)創(chuàng)作者 「推薦專欄」: 對網(wǎng)絡安全感興趣的小伙伴可以關注專欄《網(wǎng)絡安全入門到精通》 先簡單了解一下SQL注入的過程。 比如一個查詢功能,根據(jù)用戶輸入的id,查

    2024年02月07日
    瀏覽(18)
  • 【2023,學點兒新Java-14】攜程面試題:如何看待Java是一門半編譯半解釋型的語言?| 咨詢互聯(lián)網(wǎng)行業(yè) 資深前輩的一些問題 | 附:為什么說ChatGPT的核心算法是...?| GPT-3.5

    前情回顧: 【2023,學點兒新Java-13】階段練習之Java面試企業(yè)真題(阿里巴巴拼多多 等) | 常用的Java命令行操作都有哪些 | 如何解決Java的內(nèi)存泄漏和內(nèi)存溢出問題? 【2023,學點兒新Java-12】小結:階段性復習 | Java學習書籍推薦(小白該讀哪類Java書籍?有一定基礎后,再去讀

    2024年02月09日
    瀏覽(29)
  • C++中,C::C::C::C::foo() 為什么編譯成功?

    C++中,C::C::C::C::foo() 為什么編譯成功?

    有人問: 為什么 最后那行: 能編譯成功?這是什么規(guī)則? 嗯…… Entity::Entity::Entity::Entity::Entity::Entity::foo() 竟然編譯成功?這一切的背后,是人性的扭曲,還是道德的淪喪? 敬請關注今晚八點 CPPTV 12 頻道,讓我們跟隨鏡頭走進厚厚的C++標準文檔…… 這個案例,至少牽涉到

    2024年02月12日
    瀏覽(31)
  • 為什么我的小程序審核不通過?常見原因及解決方法

    為什么我的小程序審核不通過?常見原因及解決方法

    作為程序員、小程序的開發(fā)者,工作中比開發(fā)小程序還要讓人頭疼的事,也就只有就是讓小程序通過審核了!每隔三五天,總會看到有同行在社區(qū)吐槽“吐槽下微信小程序審核機制”、“微信小程序審核不通過 放棄了,細數(shù)坑坑”。。。 認證費問題 在講小程序審核問題之前

    2024年02月10日
    瀏覽(23)
  • Go 語言為什么很少使用數(shù)組?

    大家好,我是 frank,「Golang 語言開發(fā)?!构娞栕髡摺?01 介紹 在 Go 語言中,數(shù)組是一塊連續(xù)的內(nèi)存,數(shù)組不可以擴容,數(shù)組在作為參數(shù)傳遞時,屬于值傳遞。 數(shù)組的長度和類型共同決定數(shù)組的類型,不同類型的數(shù)組之間不可以比較,否則在編譯時會報錯。 因為數(shù)組的一些

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包