日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言】C语言里++能随便用吗?

發(fā)布時間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言】C语言里++能随便用吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.問題提出

在Blink區(qū)看到這么一個問題:

#include <stdio.h>int main() {int a = 3;printf("%d %d %d %d %d\n", a++, ++a, a++, ++a, a++);return 0; }

運行結(jié)果(猜測):

3 5 5 7 7

最終a的值為8。

這看起來是一個美好的結(jié)果,但是這樣是對的嗎?
我們來看一看MinGW的gcc編譯器下的運行結(jié)果:

7 8 5 8 3

下圖為證:

確實如此,這個結(jié)果我測親測,也與那位提問者提供的相符,但這使人很困惑是吧,我決心略微進(jìn)行一下探究,講出我的一些拙見。

二.最基本的情形的查看

  • 分別處理



  • 合起來簡單處理


可見,將二者分開、不在同一個printf()里就會得到預(yù)期的結(jié)果,否則會出現(xiàn)“意外情況”。

三.對上述基本情況的分析研究

1.分別處理。

我們試著將一條語句拆成兩行,按照不同的先后順序執(zhí)行,就得到了上面的結(jié)果。這證明單獨運行不會出現(xiàn)預(yù)料之外的“異常情況”。

2.合起來簡單處理。

把++放在printf()之外,得到我們原本預(yù)期的結(jié)果而非問題遇到的情況。這說明問題可能出在printf()里的多個++上(極有可能是編譯問題)。

四.歸納分析

繼續(xù)做測試,一步一步地增加測試:

上面的逐步歸納基本成型,我們可以設(shè)計另一個例子,進(jìn)一步驗證:

int i = 1;printf("%d", (++i)+(++i));

上面代碼運行結(jié)果是

6

可見gcc可能是這樣工作的(資料引用):

++i; ++i; i = i + i; // ---> 6

五.得到結(jié)論

我不能說我很了解這里的知識,就只能說我根據(jù)實驗歸納得到了下面的結(jié)論(僅限本問題):
輸出序列中,++a對應(yīng)的全是a的終值,a++對應(yīng)的需要從右往左數(shù)依次是a、a+2、a+4、……

六.總結(jié)

這個問題本來覺得很有趣,跟一些大佬探討了一下。
大佬們均并不建議我深究,說應(yīng)該是C編譯器的問題,更是有一位給了我上文中的鏈接,讓我進(jìn)一步體會到問題可能真的源自編譯器。

也問了一位大學(xué)老師,給出的回復(fù)是:
(1)如果是在做選擇題,建議跳過(實際上我并沒有做選擇題)。
(2)如果是寫程序,建議避免這么使用(實際上我不喜歡使用)。

實際上,我確實不喜歡濫用++的代碼,大量的++在我看來固然方便了編寫簡潔的代碼但也降低了可讀性,也可能由于某種疏漏引發(fā)沒必要的Bug。

再講講問題本身。
看到這個問題我是比較頭痛的,因為熟悉我的人可能知道,我是Python起步編程,Java正式學(xué)成體系的(比起各位大佬還是非常菜的),后面出于種種緣由才邂逅了各種美妙的編程語言。C語言我并非不懂,但也并不是我的強(qiáng)項,但還是覺得應(yīng)該人有一種探究精神且不能過分拘泥于自己的舒適區(qū),這也算我自己認(rèn)定的一種自我追求與自我修養(yǎng)吧。

我現(xiàn)在隨著理解的深入,有些問題已經(jīng)不可避免的接觸到我的痛點,想來也只能迎難而上、風(fēng)雨無阻,誰叫我以作為一名進(jìn)階的Java碼農(nóng)為榮呢?(哈哈,Python真香)

如對本問題有更深的理解,可以留言,感謝。


2021-02-05更新

吐槽!

現(xiàn)在很多計算機(jī)的基礎(chǔ)C教育往往把++這種東西看的太重,其實真的不好,我覺得這是在誤導(dǎo)人。

我覺得編程學(xué)的比較不錯的人不應(yīng)該是背書背代碼背規(guī)則的庸才,能流暢地編程并快速的學(xué)會一樣新鮮的技術(shù)的人是更好的,可惜……

之前就有什么i+++++i之類的睿智代碼,吐了……無語子……

比如下面這種代碼,常考,要是你自己整天寫這種代碼的話,呵呵,純屬給自己惹麻煩。

#include <stdio.h>int main ( ) {int a,b,k;k=(a=2,b=5,a>b?a++:b++,a+b);printf("k = %d\n", k); }

總結(jié)

以上是生活随笔為你收集整理的【C语言】C语言里++能随便用吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。