【C#學習筆記02】基本元素與數據類型

引言

深入了解C語言的基本元素、計算機存儲器結構、常量與變量的概念以及數據類型。這些內容是C語言編程的基礎,掌握它們對于編寫高效、可靠的嵌入式程序至關重要。


1.C語言的基本元素

?編程語言的發展離不開自然語言,所以編程語言的語法和詞匯也是由自然語言發展而來,而自然語言的基礎是文字,舉個例子:想要學會漢語,則必須先學會漢字,想要學會英語,則必須先學會單詞,通過下圖可以知道,想要學會C語言,必須先學會關鍵字。

完成一個程序設計的過程就相當于是完成一篇文章的編寫,而一篇文章(程序)是由多個段落(函數)構成的,一個段落(函數)是由多個句子(語句)構成的,一個句子(語句)是由多個短語(表達式)構成的,一個短語(表達式)是由多個單詞(標識符)構成的,一個單詞(標識符)是由多個文字(字符)組成的。

C語言程序由一系列基本元素構成,這些元素包括:

  • 字符集:C語言支持的基本字符,包括字母、數字、特殊符號(如??+??、??-??、??*??等)。
  • 關鍵字:C語言中具有特殊含義的保留字,如??int??、??return??、??if??等。
  • 標識符:由程序員定義的名稱,用于表示變量、函數、數組等。
  • 運算符:用于執行操作的符號,如算術運算符(??+??、??-??)、關系運算符(??>??、??<??)等。
  • 分隔符:用于分隔代碼元素的符號,如分號(??;??)、逗號(??,??)等。
#include <stdio.h>int main() {int a = 10;  // int是關鍵字,a是標識符int b = 20;int sum = a + b;  // +是運算符printf("Sum: %d\n", sum);  // ;是分隔符return 0;
}

可以看到,C語言標準中常用的關鍵字只有32個,并且這些關鍵字都是小寫的,并且都是某些英文單詞的縮寫。 int -- integer? ?char -- character?


2.?計算機存儲器結構

數據概念

數據是計算機處理的基本單位,可以是數字、字符、布爾值等。在C語言中,數據通過變量和常量來表示。人類使用計算機的目的就是為了高效的處理大量數據,但是數據的類型有很多,比如聲音、圖像、文字、數字等,那計算機是如何區分數據的呢? 回答:計算機不用區分,計算機只采用二進制存儲。


內存概念

內存是計算機用于存儲數據和程序的硬件設備。每個內存單元都有一個唯一的地址,程序通過地址訪問內存中的數據。

對于計算機中的存儲器而言,一般分為兩種:RAM(隨機存儲器)ROM(只讀存儲器) ?

(1) 只讀存儲器

只讀存儲器的英文全稱是Read Only Memory,簡稱為ROM,屬于非易失性存儲設備,指的是掉電不丟失數據,可以把數據長時間存儲,一般分為很多種,具體的區別可以通過《數電》進行了解,對于計算機的機械硬盤或者固態硬盤而言指的就是ROM。

(2) 隨機存儲器

隨機存儲器的英文全稱是Random Access Memory,簡稱為RAM,屬于易失性存儲設備,指的是掉電會丟失數據,但是讀寫速度很快。所以一般CPU都是直接和RAM打交道。


內存單位

內存中一個MOS管可以存儲一個二進制數0或1,為了方便記憶,標準規定把一個二進制數用bit來進行表示,bit(比特)是binary digit的縮寫,中文翻譯為。專業術語一般把一個二進制數稱為一位二進制數。所以bit就用來表示計算機數據的最小單位。

注意計算機處理數據的基本單位是byte,計算機處理數據的最小單位是bit,1byte = 8bit。

內存的單位從小到大依次為:

  • 位(Bit):最小的存儲單位,表示一個二進制位(0或1)。
  • 字節(Byte):8位組成一個字節,是內存的基本單位。
  • 千字節(KB):1024字節。
  • 兆字節(MB):1024千字節。
  • 吉字節(GB):1024兆字節。

#include <stdio.h>int main() {int a = 10;  // 假設int類型占4個字節printf("Size of a: %lu bytes\n", sizeof(a));  // 輸出a占用的內存大小return 0;
}

3.?C語言的常量與變量

C語言采用常量(Constant)和變量(Variable)作為數據存儲的基本單元。從內存管理的角度來看,內存是由連續編址的存儲單元構成的物理空間,每個存儲單元(8位)都具有唯一的地址標識。雖然理論上可以通過直接尋址方式訪問這些存儲單元,但由于效率考量,實踐中通常采用更高級的抽象訪問機制。

根據C語言規范,開發者享有動態內存申請權限。申請過程需遵循以下協議:

  1. 顯式聲明所需內存空間的大小(以字節為單位)
  2. 內核負責在物理內存中定位合適的連續空間
  3. 系統將分配的內存首地址返回給申請者

為提升內存訪問效率,C語言引入了符號化訪問機制:

  • 開發者可為分配的內存空間指定標識符
  • 系統維護符號名與物理地址的映射關系
  • 通過符號名實現間接內存訪問

基于數據可變性特征,C語言將存儲單元劃分為兩種類型:

  1. 常量(Constant):程序運行期間值不可變
  2. 變量(Variable):程序運行期間值可變

常量

?常量指的是在程序運行期間值不會發生改變的量,一般使用的數字,比如3.14用來表示圓周率,一般情況下,用戶都是用通過宏定義的方式來實現常量的設計,宏定義其實就是簡單的文本替換,在預處理階段預處理器會把程序中的宏定義進行展開。C語言中規定宏定義使用預處理指令 #define 來進行設計。

常量是程序運行過程中值不會改變的數據。常量可以分為以下幾種:

  • 整型常量:如??10??、??-20??。
  • 浮點型常量:如??3.14??、??-0.5??。
  • 字符常量:如??'A'??、??'1'??。
  • 字符串常量:如??"Hello, World!"??。

變量

變量是程序運行過程中值可以改變的數據。變量指的是在程序運行期間值可能發生變化的量,用戶可以根據實際需要來向kernel申請一塊存儲單元,并對這塊存儲單元進行命名,然后用戶可以隨時修改存儲單元中的數據。申請的存儲單元的大小可以通過C語言中的數據類型進行指定。

?

命名規則

變量和常量的命名需要遵循以下規則:

  • 只能包含字母、數字和下劃線(??_??)。
  • 不能以數字開頭。
  • 不能使用C語言關鍵字。
  • 區分大小寫。

注意為了防止二義性出現,C語言標準規定不可以把系統保留字,以及程序中已經存在的函數名稱、以及用戶已經定義出來的標識符名稱作為新的標識符名稱(同一個作用域內不能)。 ?

另外C語言的標識符是區分大小寫,并且作為用戶而言,標識符的命名應該是有意義的

int myVariable;  // 合法
int _value;      // 合法
int 1value;      // 非法,不能以數字開頭
int return;      // 非法,return是關鍵字

4.?C語言的數據類型

C語言提供了豐富的數據類型,用于表示不同類型的數據。以下是常見的數據類型:


字符型(??char??)

字符型用于存儲單個字符,占用1個字節。C語言標準中提供了一個關鍵字 char ,其實是 character 單詞的縮寫,表示字符的意思,操作系統char類型的數據寬度定義為1字節,用于存儲字符,C語言標準中用單撇號’ ’表示字符。

C語言標準規定:用戶打算存儲字符 ? 數據寬度 ?變量名稱 ; ?舉例: char ?ch ?= ?‘c’ ;

C語言標準中關于字符的種類有兩種:普通字符 and 轉義字符,對于ASCII碼表中轉義字符

注意ASCII碼中的轉義字符需要使用 ‘\0’ ?‘\r’ ?‘\n’進行表示,代表字符具有特殊的意義分別表示:空格、換行和回車。

#include <stdio.h>int main() {char letter = 'A';printf("%c\n", letter);return 0;
}

輸出

A

整數型(??int??)

C語言標準中使用關鍵字int表示整數,整數型用于存儲整數值,通常占用4個字節,關鍵字 int 的英文單詞是 integer ,對應的中文具有整數的含義,在32系統下關鍵字int的數據寬度是4字節,也就意味著存儲單元所能存儲的整數范圍比較廣泛。

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

輸出

100

短整型(??short??)

C語言標準中規定使用關鍵字 short 來表示短整型,短整型用于存儲較小的整數值,通常占用2個字節。一般短整型的全稱是 short int ,只不過寫程序的時候可以只寫 short 即可,在32位系統下 short 短整型占2字節。

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

輸出

32767

長整型(??long??)

C語言標準中規定使用關鍵字 long 來表示長整型,長整型用于存儲較大的整數值,通常占用4個或8個字節。一般長整型的全稱是 long int ,只不過寫程序的時候可以只寫long即可,在32位系統下 long 長整型占4字節,在64位系統占8字節。

#include <stdio.h>int main() {long bigNumber = 2147483647;printf("%ld\n", bigNumber);return 0;
}

輸出

2147483647

長長整型(??long long??)

C語言標準中規定使用關鍵字 long long 來表示長長整型,長長整型用于存儲非常大的整數值。但是長長整型是使用 long long 來表示,在32位和64位系統下長長整型占8字節。

#include <stdio.h>int main() {long long hugeNumber = 9223372036854775807;printf("%lld\n", hugeNumber);return 0;
}

輸出

9223372036854775807

浮點型(??float??和??double??)

數據有整數和小數之分,一般情況下處理的數據也是具有小數的,所以C語言標準中規定使用關鍵字 float 來表示單精度浮點數,單精度浮點型占4字節,另外C語言標準中也提供了另一個關鍵字 double 用來表示雙精度浮點數,double 占8字節,其實C語言也提供了一種類型 long double,該類型占16字節。

#include <stdio.h>int main() {float pi = 3.14;double precisePi = 3.1415926535;printf("%f\n", pi);printf("%f\n", precisePi);return 0;
}

輸出

3.14
3.1415926535

字符串

字符串是表示某種含義的一個字符序列,字符串在內存是需要一塊連續的內存空間進行存儲,C語言中規定字符串使用雙引號””表示,并且規定字符串的結束標志是’\0’,但’\0’不需要用戶手動添加,系統會自動在一個字符串的末尾添加’\0’

#include <stdio.h>int main() {char name[] = "Alice";printf("%s\n", name);return 0;
}

輸出

Alice

布爾型(??bool??)

用戶有時候需要在程序進行判斷,在C89標準中,用戶如果想要判斷某種條件是否成立,一般是定義一個整型變量,然后利用數字0和數字1來表示條件是否成立,用戶就可以把變量作為一個標志位使用。 ?在C99標準可以使用布爾型來表示真假兩種情況,頭文件 stdbool.h 有相關描述,在頭文件中定義了三個宏,分別是?bool、true?以及?false

#include <stdio.h>
#include <stdbool.h>int main() {bool isCodingFun = true;printf("%d\n", isCodingFun);  // 輸出1表示truereturn 0;
}

輸出

1

補充

?C語言標準中提供了兩個關鍵字? &&? unsigned用于修飾整數,unsigned表示無符號,signed表示有符號,C語言中的signed修飾符是隱式聲明,也就是用戶定義整型變量的時候如果沒有特別強調,則整型變量默認是有符號的。用戶如果要存儲無符號的整數,則必須定義變量必須顯式聲明變量是無符號的(unsigned)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73019.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESP8266TCP客戶端(單連接TCP Client)

單連接TCP Client 電腦作為服務器&#xff0c;8266作為客戶端 1.配置WiFi模式 ATCWMODE3 //softAPstation mode 相應&#xff1a;ok 2.連接路由器 ATCWJAP“SSID”&#xff0c;“password” //SSID就是wifi的名字&#xff0c; password WIFI密碼 響應&#xff…

洛谷 P2234:[HNOI2002] 營業額統計 ← STL set

【題目來源】 https://www.luogu.com.cn/problem/P2234 【題目描述】 Tiger 最近被公司升任為營業部經理&#xff0c;他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 Tiger 拿出了公司的賬本&#xff0c;賬本上記錄了公司成立以來每天的營業額。分析…

VSCode 2025最新前端開發必備插件推薦匯總(提效指南)

&#x1f31f;前言: 如果你是一名前端開發工程師&#xff0c;合適的開發工具能大大提高工作效率。Visual Studio Code (VSCode) 憑借其輕量級、高擴展性的特點&#xff0c;已成為眾多前端開發者在win系電腦的首選IDE。 名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。—…

Java學習--Redis

官網&#xff1a;https://redis.io 中文網&#xff1a;Redis中文網 Redis安裝包分為 Windows 版和 Linux 版&#xff1a; Windows版下載地址&#xff1a;Releases microsoftarchive/redis GitHub Linux版下載地址&#xff1a; Index of /releases/ 一、Redis簡介 Redis是…

matlab慕課學習3.2+3.3

于20250310 3.2用if語句實現選擇結構 3.2.1什么是選擇結構 用if 語句和switch語句可實現選擇結構 3.2.2單分支if語句 if 條件語句組 %可以是一條也可是多條end 當條件為標量&#xff0c;非0表成立&#xff0c;0表示不成立。 當條件為矩陣時&#xff0c;矩陣非空&#xff…

JavaScript性能優化:DOM操作優化實戰

JavaScript性能優化&#xff1a;DOM操作優化實戰 一 重排與重繪的代價 問題場景 用戶點擊按鈕后&#xff0c;需要動態生成一個包含10,000個選項的下拉列表&#xff0c;但界面出現長達5秒的凍結。 錯誤代碼示例 function createList() {const ul document.getElementById(…

【Java學習】包裝類

面向對象系列九 包裝類變量 一、裝箱 1.實例化包裝對象 2.靜態緩存池 3.寫法 二、拆箱 包裝類變量 每個基本數據類型都有對應的基本類型的包裝類變量&#xff0c;將基本數據類型通過對應的包裝類對象載入著進入到類與對象面向對象體系 一、裝箱 Integer.valueOf(int) —…

【第22節】C++設計模式(行為模式)-Iterator(迭代器)模式

一、問題背景 Iterator 模式是設計模式中最為常見和實用的模式之一。它的核心思想是將對聚合對象的遍歷操作封裝到一個獨立的類中&#xff0c;從而避免暴露聚合對象的內部表示。通過 Iterator 模式&#xff0c;我們可以實現對聚合對象的統一遍歷接口&#xff0c;而不需要關心聚…

02C#基本結構篇(D4_注釋-訪問修飾符-標識符-關鍵字-運算符-流程控制語句)

目錄 一、注釋 1. 單行注釋 2. 多行注釋 3. XML文檔注釋 4. 使用建議和最佳實踐&#xff1a; 二、訪問修飾符 1. public 2. private 3. protected 4. internal 5. protected internal 或 protected and internal 6. private protected 或 private and protected 7.…

【CXX】6.2 str — rust::Str

Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果輸入不是 UTF-8&#xff0c;拋出 std::invalid_argument 異常。Str(const std::string &);Str(const char *);Str(con…

基于windows的MySQL安裝(2025最新,小白可用)

目錄 一&#xff0c;下載官網地址&#xff08;及版本選擇&#xff09;&#xff1a; 二&#xff0c;以安裝程序的方式安裝MySQL 1&#xff0c;安裝過程 2&#xff0c;用客戶端使用MySQL 3&#xff0c;配置環境變量在windows命令行界面使用mysql 下次開機后手動啟用服務 三…

Jenkins實現自動化構建與部署:上手攻略

一、持續集成與Jenkins核心價值 1.1 為什么需要自動化構建&#xff1f; 在現代化軟件開發中&#xff0c;團隊每日面臨以下挑戰&#xff1a; 高頻代碼提交&#xff1a;平均每個開發者每天提交5-10次代碼。多環境部署&#xff1a;開發、測試、預發布、生產環境需頻繁同步。復雜…

4個 Vue 路由實現的過程

大家好&#xff0c;我是大澈&#xff01;一個喜歡結交朋友、喜歡編程技術和科技前沿的老程序員&#x1f468;&#x1f3fb;?&#x1f4bb;&#xff0c;關注我&#xff0c;科技未來或許我能幫到你&#xff01; Vue 路由相信朋友們用的都很熟了&#xff0c;但是你知道 Vue 路由…

數學之快速冪-數的冪次

題目描述 給定三個正整數 N,M,P&#xff0c;求 輸入描述 第 1 行為一個整數 T&#xff0c;表示測試數據數量。 接下來的 T 行每行包含三個正整數 N,M,P。 輸出描述 輸出共 T 行&#xff0c;每行包含一個整數&#xff0c;表示答案。 輸入輸出樣例 示例 1 輸入 3 2 3 7 4…

【JavaEE】多線程進階(2)

【JavaEE】多線程進階&#xff08;2&#xff09; 一、JUC(java.util.concurrent) 的常?類1.1 Callable 接?1.2 ReentrantLock1.3 原子類原子類的特性&#xff1a;常見原子類&#xff1a;原子類的實例&#xff1a; 1.4 線程池1.5 信號量 Semaphore代碼實例 1.6 CountDownLatch…

[漏洞篇]XSS漏洞詳解

[漏洞篇]XSS漏洞 一、 介紹 概念 XSS&#xff1a;通過JS達到攻擊效果 XSS全稱跨站腳本(Cross Site Scripting)&#xff0c;為避免與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆&#xff0c;故縮寫為XSS。這是一種將任意 Javascript 代碼插入到其他Web用戶頁面里執行以…

越早越好!8 個反直覺的金錢真相|金錢心理學

很多人都追求財富自由&#xff0c;但成功的人少之又少。 這可能是因為&#xff0c;人們往往忽略了一些金錢的真相和常識。 01 金錢常識 & 真相 為了構建健康的金錢觀&#xff0c;我讀了一本有點反直覺&#xff0c;有點像雞湯&#xff0c;但都是財富真相的書。 來自 Morg…

Spring Boot/Spring Cloud 整合 ELK(Elasticsearch、Logstash、Kibana)詳細避坑指南

我們在開發中經常會寫日志&#xff0c;所以需要有個日志可視化界面管理&#xff0c;使用ELK可以實現高效集中化的日志管理與分析&#xff0c;提升性能穩定性&#xff0c;滿足安全合規要求&#xff0c;支持開發運維工作。 下述是我在搭建ELK時遇到的許許多多的坑&#xff0c;希望…

AI編程: 一個案例對比CPU和GPU在深度學習方面的性能差異

背景 字節跳動正式發布中國首個AI原生集成開發環境工具&#xff08;AI IDE&#xff09;——AI編程工具Trae國內版。 該工具模型搭載doubao-1.5-pro&#xff0c;支持切換滿血版DeepSeek R1&V3&#xff0c; 可以幫助各階段開發者與AI流暢協作&#xff0c;更快、更高質量地完…

手機屏幕摔不顯示了,如何用其他屏幕臨時顯示,用來導出資料或者清理手機

首先準備一個拓展塢 然后 插入一個外接的U盤 插入鼠標 插入有數字小鍵盤區的鍵盤 然后準備一根高清線&#xff0c;一端鏈接電腦顯示器,一端插入拓展塢 把拓展塢的連接線&#xff0c;插入手機充電口&#xff08;可能會需要轉接頭&#xff09; 然后確保手機開機 按下鍵盤…