C/C++編程筆記:C語言自增(++)和自減(--)運算符詳解,筆記分享

来源:https://www.cnblogs.com/yxy6/archive/2020/07/12/13290120.html
-Advertisement-
Play Games

一個整數類型的變數自身加 1 可以這樣寫: a = a + 1; 或者 a += 1; 不過,C語言還支持另外一種更加簡潔的寫法,就是: a++; 或者 ++a; 這種寫法叫做自加或自增,意思很明確,就是每次自身加 1。 相應的,也有a--和--a,它們叫做自減,表示自身減 1。 ++和--分別稱為 ...


一個整數類型的變數自身加 1 可以這樣寫:

a = a + 1;

或者

a += 1;

不過,C語言還支持另外一種更加簡潔的寫法,就是:

a++;

或者

++a;

這種寫法叫做自加或自增,意思很明確,就是每次自身加 1。

相應的,也有a--和--a,它們叫做自減,表示自身減 1。

++和--分別稱為自增運算符和自減運算符,它們在迴圈結構中使用很頻繁。

自增和自減的示例:

#include<stdio.h>

intmain()

{

inta=10,b=20;

printf("a=%d, b=%d\n",a,b);

++a;

--b;

printf("a=%d, b=%d\n",a,b);

a++;

b--;

printf("a=%d, b=%d\n",a,b);

return0;

}

運行結果:

a=10, b=20

a=11, b=19

a=12, b=18

自增自減完成後,會用新值替換舊值,將新值保存在當前變數中。

自增自減的結果必須得有變數來接收,所以自增自減只能針對變數,不能針對數字,例如10++就是錯誤的。

需要重點說明的是,++ 在變數前面和後面是有區別的:

++ 在前面叫做前自增(例如 ++a)。前自增先進行自增運算,再進行其他操作。

++ 在後面叫做後自增(例如 a++)。後自增先進行其他操作,再進行自增運算。

自減(--)也一樣,有前自減和後自減之分。

下麵的例子能更好地說明前自增(前自減)和後自增(後自減)的區別:

#include<stdio.h>

intmain()

{

inta=10,b=20,c=30,d=40;

inta1=++a,b1=b++,c1=--c,d1=d--;

 

printf("a=%d, a1=%d\n",a,a1);

printf("b=%d, b1=%d\n",b,b1);

printf("c=%d, c1=%d\n",c,c1);

printf("d=%d, d1=%d\n",d,d1);

 

return0;

}

輸出結果:

a=11, a1=11

b=21, b1=20

c=29, c1=29

d=39, d1=40

a、b、c、d 的輸出結果相信大家沒有疑問,下麵重點分析a1、b1、c1、d1:

1) 對於a1=++a,先執行 ++a,結果為 11,再將 11 賦值給 a1,所以 a1 的最終值為11。而 a 經過自增,最終的值也為 11。

2) 對於b1=b++,b 的值並不會立馬加 1,而是先把 b 原來的值交給 b1,然後再加 1。b 原來的值為 20,所以 b1 的值也就為 20。而 b 經過自增,最終值為 21。

3) 對於c1=--c,先執行 --c,結果為 29,再將 29 賦值給c1,所以 c1 的最終值為 29。而 c 經過自減,最終的值也為 29。

4) 對於d1=d--,d 的值並不會立馬減 1,而是先把 d 原來的值交給 d1,然後再減 1。d 原來的值為 40,所以 d1 的值也就為 40。而 d 經過自減,最終值為 39。

可以看出:a1=++a;會先進行自增操作,再進行賦值操作;而b1=b++;會先進行賦值操作,再進行自增操作。c1=--c;和d1=d--;也是如此。

為了強化記憶,我們再來看一個自增自減的綜合示例:

#include<stdio.h>

intmain()

{

inta=12,b=1;

intc=a-(b--);// ①

intd=(++a)-(--b);// ②

printf("c=%d, d=%d\n",c,d);

return0;

}

輸出結果:

c=11, d=14

我們來分析一下:

1) 執行語句①時,因為是後自減,會先進行a-b運算,結果是 11,然後 b 再自減,就變成了 0;最後再將a-b的結果(也就是11)交給 c,所以 c 的值是 11。

2) 執行語句②之前,b 的值已經變成 0。對於d=(++a)-(--b),a 會先自增,變成 13,然後 b 再自減,變成 -1,最後再計算13-(-1),結果是 14,交給 d,所以 d 最終是 14。

所以,你們現在學到了嗎?希望本文對你們有幫助!


自學C/C++編程難度很大,不妨和一些志同道合的小伙伴一起學習成長!

C語言C++編程學習交流圈子,【點擊進入微信公眾號:C語言編程學習基地

有一些源碼和資料分享,歡迎轉行也學習編程的伙伴,和大家一起交流成長會比自己琢磨更快哦!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在4月21日晚,Vue作者尤雨溪在嗶哩嗶哩直播分享了Vue.js 3.0 Beta最新進展。 裡面尤大大所提到他最近在做的這個小工具 vite ,一個實驗性的no build的vue開發伺服器。(這個小工具可以支持熱更新,且不用預編譯) 一丶安裝 命令行複製以下 mkdir vue-vite  ...
  • 1 #include <stdio.h> 2 3 void createbtree(int *btree,int *data,int len) 4 { 5 int level; //樹的層數 6 int i; 7 8 btree[1] = data[1]; //創建根節點 9 for( i = 2; ...
  • python virtualenv虛擬環境配置與使用 By:賴富玉 QQ:1033553122 概述 python開發過程中,我們可能需要同時開發多款應用,這些應用可能公用同一個版本的Python程式,但是使用不同版本的第三方庫,比如A應用使用six 1.12.0,而B應用需要使用six 1.15. ...
  • 最近一直在研究AQS的源碼,希望可以更深刻的理解AQS的實現原理。雖然網上有很多關於AQS的源碼分析,但是看完以後感覺還是一知半解。於是,我將自己的整個理解過程記錄下來了,希望對大家有所幫助。 基本原理 AQS是Java中鎖的基礎,主要由兩個隊列組成。一個隊列是同步隊列,另一個是條件隊列。 同步隊列 ...
  • 為了方便以後配置新的windows電腦java、idea,所以專門記錄一下 1:JDK JDK是 Java 語言的軟體開發工具包,主要用於移動設備、嵌入式設備上的java應用程式。JDK是整個java開發的核心,它包含了JAVA的運行環境(JVM+Java系統類庫)和JAVA工具。所以首先要配置好j ...
  • 描述Python的變數聲明,可覷其語言設計思路,實現更快地代碼閱讀。 變數聲明 C# public、protect、private、internal 明確指出適用範圍 (完全公開、子類可訪問、僅自己可訪問、程式集內可訪問) Python 有點神奇,沒有不能訪問的變數,一般通過“潛規則”暗示其私有性 ...
  • pyenv 簡介 pyenv 是 Python 版本管理工具。 pyenv 可以改變全局的 Python 版本,在系統中安裝多個版本的 Python, 設置目錄級別的 Python 版本,還能創建和管理 virtual python environments。 安裝 pyenv 安裝git:~]# ...
  • 一、記憶體模型及分區 JVM 分為堆區和棧區,還有方法區,初始化的對象放在堆裡面,引用放在棧裡面,class 類信息常量池(static 常量和 static 變數)等放在方法區。 1、棧(Stack-線程私有) 1.1 棧的結構是棧幀組成的,調用一個方法就壓入一幀,幀上面存儲局部變數表,操作數棧,方 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...