C語言入門教程-(4)常量和變數

来源:https://www.cnblogs.com/cxyjczs/archive/2018/12/28/10193398.html
-Advertisement-
Play Games

本節內容主要介紹了C語言程式的常量和變數。介紹了常量和變數的概念以及命名規範,然後講解了它們的一些基本使用方法。 ...


1.常量和變數的概念

程式執行過程中其值不能發生改變的量叫做常量,其值能發生改變的量叫做變數。常量可以直接使用,而變數則必須先定義後才能使用,否則編譯器會報錯。

2.常量和變數的命名規範

在介紹常量和變數的命名規範之前,我們先瞭解一下什麼是標識符和關鍵字。

2.1 標識符

標識符,用來標識符號常量名、變數名、函數名、數組名、文件名、類名、對象名等。簡單的將就是大家取的名字~~有效標識符的構成規則如下:

  • 1)第一個字元必須是字母(大小寫都行)或下劃線,不能是數字;

  • 2)後跟字母(大小寫都行)、下劃線或數字組成;

  • 3)標識符中的大小寫字母有區別。如,變數sum,Sum,SUM代表三個不同的變數;

  • 4)不能與編譯系統已經預定義的、具有特殊用途的保留標識符(即關鍵字)同名。比如,不能將標識符命名int,char,float,break,case,for,while,return等等;
    下麵列出幾個有效的標識符:

teemo    
Garen
move_name
dj8023  
_temp  
i
the_hero_is_Garen

下麵列出幾個無效的標識符:

8times    //第一個字元必須是字母(大小寫都行)或下劃線,不能是數字。
price/tea    //後跟字母(大小寫都行)、下劃線或數字組成,/不是屬於之中。
my name    //含有空格
x+y    //包含了'+'號
int    //C語言程式中的關鍵字

2.2 關鍵字

C語言中具有特殊含義的英文單詞,通常用於構成語句,存儲數據,定義數據類型等。下麵列出了C語言中的一些保留字。這些保留字不能作為常量名、變數名或其他標識符名稱。

  • 1)基本數據類型
    int:聲明整數類型
    float:聲明浮點型
    double:聲明雙精度浮點型
    char:聲明字元類型
    void:空類型,聲明函數無返回值或無參數

  • 2)流程式控制制
    條件判斷:if、else、switch、case、default等
    迴圈:while、do、for、break、continue
    返回:return

在本節中,先瞭解一下就行,有很多不明白的關鍵字後面會講到。

2.3 命名規範

首先,必須是有效的標識符。在這個基礎上,我們使用的命名最好能做到看名字就明白它表示什麼。如果要使用一個變數來表示teemo的血量,我們可以將其命名為teemo_hp或者teemoHp,而不是隨便的命名為a或者b之類的。遇到兩個或者更多的單片語成的名稱,我們通常用下劃線字元將它們連接起來,或者從第二單詞開始將每一個單詞的第一個字母大寫。

還有一些程式員可能會在變數中加入描述變數類型或者內容的首碼。例如,可以將整型變數teemoHp命名為nTeemoHp,其中n表示整數值。這樣做的好處是在你遇到這個變數的時候,可以很直接的知道這個變數的類型。常用的幾種首碼有:c(表示單個字元)、p(表示指針)等。另外,常量的標識符習慣用大寫字母表示,變數的標識符習慣用小寫字母表示。單下劃線打頭的標識符一般代表標準資料庫的變數,雙下劃線打頭的標識符一般代表編譯器的變數。

關於命名,想說的是,命名可以根據自己的需要、喜好和個人風格來使用,但起碼要保證一個程式裡面的風格是一致性的。在團隊共同開發中,則需要按照規範進行命名。規範的命名不僅可以讓自己以後看的明白,也利於給團隊其他人維護代碼。

3.常量

3.1 直接常量

直接常量又可以叫做字面常量,通過數據來直接表現。在C語言中,編譯器會自動根據字面常量的表示形式確定其類型。例如:

y = x + 3;

在上面的程式中,3將會被編譯器作為int類型的常量。再例如:

y = x + 3.0;

3.0是小數,則會被編譯器作為float類型的常量。當然,字元也有常量,不過和整型常量不同,字元常量必須使用單引號來進行表示。字元常量是使用單引號括起來的一個字元,不能是多個字元。例如,下麵都是合法的字元常量:

'a'、'B'、'#'、'8'

需要強調的是只能是單引號,並且只有一個字元,字元可以是ASCII碼中的任意字元。如果數字被定義成字元常量的話,就不能代表數字字面的量了。如果參與運算,它的值將會是對應的ASCII碼。比如上面的字元常量'8',在ASCII碼對應的值為56。這個時候參與運算,比如加上1,將得到的整數值是57。

3.2 符號常量

在C語言程式中,還可以使用一個符號常量來代替常量。使用符號常量有兩個好處,一個是如果需要修改常量的話,只要修改定義符號常量的語句就行;另一個好處,使得程式中常量的含義更加清楚。定義符號常量有兩種方法:#define巨集定義和const語句定義。在這裡我就先不展開講了,大家過一眼就好了,後面的教程會詳細的講解巨集定義和const的應用。

4.變數

在程式中,我們會使用到各種變數。當我們創建一個變數時,就會在記憶體中開闢一些空間。一般變數先聲明,然後初始化。

4.1 聲明變數

C語言中使用聲明語句,來聲明一個變數,指出存儲類型並提供位置標簽。C語言中,變數要求先聲明後定義,這樣做的好處在於:

  • 1.確保後面引用的變數名和聲明的一致,減少了輸入錯誤。如聲明瞭變數teemo,在後面引用時,不小心輸成了timo,編譯器將會報錯,指示timo未聲明。

  • 2.在聲明變數時,會指定變數的類型,當進行運算的時候,編譯器就可以檢查運算是否合法。

  • 3.編譯器根據指定變數的類型分配記憶體。

聲明變數的一般語法格式:

類型 變數名;

其中,類型是數據類型的關鍵字,比如說int表示整數類型、double表示雙精度浮點類型。變數名則需要符合命名規範的標識符。下麵我們將會通過簡單的程式,來介紹如何聲明變數。比如說:我們要聲明一個變數表示提莫的血量。在C語言中,就可以表示:

int teemoHp;
float teemoAttack;

int 是一種數據類型,表示是整數。
teemoHp 是一個標識符,這裡代表整數類型的血量。
; 表示一個語句結束。

我們從電腦的角度來講,第一條語句指出程式需要一個存儲空間,用這個記憶體來存儲一個整數。那麼在C語言中,寫上這個聲明語句,程式就會將電腦的某一區域記憶體,命名為teemoHp,併在這個記憶體中存放整數類型。teemoHp這個標識符就是一個變數,它代表teemo的血量。這條語句創造了一個變數teemoHp,我們把這個過程叫做變數聲明。

同類型的變數還可以在一個語句中同時聲明多個變數,各變數之間用逗號分隔開,例如:

int teemoHp, garenHp;

上面語句聲明瞭兩個整數類型的變數,等同於:

int teemoHp;
int garenHp;

4.2 變數初始化

在對變數聲明時,編譯器會給變數分配記憶體,但分配的這個記憶體並不會被清空。這個就和你刪除電腦中的文件一樣,雖然你點了刪除這些文件,但實際上這些文件還會存在,只是我們看不到了。只有當你再次存儲文件覆蓋這些文件時,這些文件才算是刪除了。這也是一些刪除的文件,也可以通過某些手段來恢復的重要原因。那麼就可能出現編譯器給我們分配的記憶體,已經有存儲值的情況,而且這個值對我們來說還是不確定的。為了防止程式因為不確定的值而出現不可預料的情況,我們在使用變數的時候就要對其進行賦初值,使得變數的值是確定的,這種方法就是初始化。

下麵再來看一個簡單的實例,我們要把提莫的血量作為一個變數,提莫的血量值是586。在C語言中,就可以表示成:

int teemoHp;
teemoHp = 586;

我們先聲明瞭一個變數teemoHp,然後將常量586保存到變數teemoHp中。第二個語句中,“=”也叫賦值操作符,這個過程叫做賦值。賦值是指數據放到記憶體的過程,我們把這個過程叫做變數的賦值;又因為是第一次賦值,也稱變數的初始化。

在聲明變數的同時可以直接對其進行賦值,上面的兩個語句,又可以直接表示成:

int teemoHp = 586;

如果多個變數具有相同的值,還可以進行連續的賦值。例如:

int teemoHp, garenHp;
teemoHp = garenHp = 586;

但不可以在聲明的時候對其進行連續賦值。像下麵語句一樣:

int teemoHp = garenHp = 586;//報錯

這樣寫會導致標識符garenHp沒有聲明,所以編譯器報錯。

如果要在一個語句中這樣做,我們應該寫成下麵語句:

int teemoHp = 586, garenHp = 586;

我們還可以寫成:

int teemoHp, garenHp = 586;
teemoHp = 586;

我們知道,在實際中,提莫通過等級的提升以及出的裝備,血量的值會不斷變化,那我們應該怎麼辦呢?答案是,血量的值是一個變數,我們可以通過再次賦值改變血量的值,例如:

int teemoHp = 586;
teemoHp = 1000;
teemoHp = 5000;

再次的賦值,會把第一次的數據覆蓋掉。也就是說,teemoHp中最後的值是5000(這怕不是一個肉提莫),這也是因為586、1000已經被覆蓋掉了。

5.總結

總結一下,本節內容主要介紹了C語言程式的常量和變數。介紹了常量和變數的概念以及命名規範,然後講解了它們的一些基本使用方法。

6.練習

4-1 對下麵進行判斷,哪些是合法標識符,哪些又不是合法標識?

su8
_total
Class
Student_name
louts_1_2_3
BASIC
M.D.John
\#123
3D45
a>b

4-2 編寫一個程式,對蓋倫的屬性值,找到合適的類型來定義並且為其賦值。
名字:簡稱為G
生命值:455
移動速度:340
攻擊速度:0.625
攻擊範圍:125
生命回覆:8.25
攻擊力:59.5

可以在評論中,寫下你們的練習答案。

之後的文章會給大家帶來更精彩的內容
歡迎關註我的知乎專欄:程式員基礎知識
獲取練習答案以及更多實戰項目
歡迎關註我的公眾號:程式員基礎知識
交(gao)流(ji)群:493584686

 


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

-Advertisement-
Play Games
更多相關文章
  • Spring Cloud 服務是一種分散式服務,包括配置管理,服務發現,斷路器,智能路由,微代理,控制匯流排,一次性令牌,全局鎖,主節點選舉, 分散式session, 集群狀態等公共組件。 一 註冊機, Spring Cloud使用erureka server。服務在啟動的時候,會將自己要發佈的服務註 ...
  • 狀態模式的定義 定義: 當一個對象內在狀態改變時允許其改變行為, 這個對象看起來像改變了其類 通俗的說, 就是一個事物有不同的狀態,在不同狀態下執行各個方法時有不同的表現, 將每個狀態都封裝成一個類, 然後通過上下文對象統一管理 其類圖如下: 其中的三個角色如下: 抽象狀態角色代碼: 抽象狀態中聲明 ...
  • 對象導論系列 被隱藏的具體實現 將程式員按角色分為類創建者和客戶端程式員。 客戶端程式員的目標是收集各種用來快速實現應用開發的類。 類創建者的目標是構建類,這種類必須向客戶端暴露必須的服務,而隱藏其她部分。為什麼呢?因為加以隱藏,那麼客戶端程式員將不能訪問她,意味著類創建者可以任意修改被隱藏的部分, ...
  • 利用靜態方法定義一個簡單工廠,這是很常見的技巧,常被稱為靜態工廠(Static Factory)。靜態工廠是 new 關鍵詞實例化的另一種替代,也更像是一種編程習慣而非一種設計模式。和簡單工廠相比,靜態工廠通過一個靜態方法去實例化對象。為何使用靜態方法?因為不需要創建工廠實例就可以直接獲取對象。 ...
  • 明顯的二合一問題。貪心的想,要個數最少,那麼久從頁數多的開始選。於是對於前50%的數據,可以直接預處理(1~x,1~y)矩陣內大於等於k的元素個數、元素之和的首碼和,然後二分k值來驗證;對於後50%的數據,已經退化為一維情形,若再使用前面的方法會mle(5e5 1e3 4),那麼考慮使用主席樹來維護 ...
  • git之vim編輯器退出命令 張文軍微博主頁 張文軍碼雲主頁 張文軍新浪雲主頁 張文軍博客主頁 剛學習git,好多東西沒接觸過,進入vim後不知道如何出來了,網上找了很多都說是:esc +shift+wq 。 然而我試了好幾次都不行,最後發現是:esc + : + qw ,這樣就一下退出編輯了。 ...
  • 搜索二叉樹是一種具有良好排序和查找性能的二叉樹數據結構,包括多種操作,本篇只介紹插入,排序(遍歷),和刪除操作,重點是刪除操作比較複雜,用到的例子也是本人親自畫的 用到的測試圖數據例子 第一、構建節點 1 template <typename T> class BST; 2 template <ty ...
  • 本文詳細介紹如何向maven倉庫中上傳第三方jar包。 1、在本地maven安裝路徑中找到conf文件夾下麵的setting.xml文件,裡面有訪問maven倉庫的路徑和賬號、密碼; 2、瀏覽器打開第一步中找到的路徑; 3、打開頁面後點擊Log In輸入username、password進行登錄。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...