C語言---數據類型

文章目錄

  • 數據類型分類
  • 1. 基本類型 (Basic Types)
    • a. 整數類型 (Integer Types)
      • char (字符型)
      • int (整型)
      • short (短整型)
      • long (長整型)
      • long long (C99標準引入)
      • 圖片匯總
    • b. 浮點類型 (Floating-Point Types)
      • float (單精度浮點型)
      • double (雙精度浮點型)
      • long double (長雙精度浮點型)
      • 圖片匯總
  • 2. 枚舉類型 (Enumeration Type) - enum
  • 3. void 類型
    • 1、作為函數返回類型
    • 2、作為函數參數
    • 3、作為指針類型(萬能指針)
  • 4. 派生類型 (Derived Types)
    • a. 指針類型 (Pointer Types)
    • b. 數組類型 (Array Types)
    • c. 結構體類型 (Structure Type) - struct
    • d. 共用體類型 (Union Type) - union
    • e. 函數類型 (Function Types)
  • 類型限定符 (Type Qualifiers)

在 C 語言中,數據類型指用于聲明不同類型的變量或函數。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。

數據類型分類

C 語言的數據類型主要可以分為以下幾大類:
在這里插入圖片描述

1. 基本類型 (Basic Types)

a. 整數類型 (Integer Types)

用于存儲整數,可帶有符號。
注意:確切的大小和范圍依賴于編譯器和平臺。<limits.h> 頭文件定義了這些類型的最大值和最小值(如 INT_MAX, CHAR_BIT 等)。

char (字符型)

用途:存儲單個字符(實際上是存儲該字符的 ASCII 碼)。
大小:通常為 1 字節。
signed char(或直接寫char,signed通常可忽略):有符號,范圍至少 -128 到 127。
unsigned char:無符號,范圍至少 0 到 255。

注意:普通的 char 是否帶符號取決于編譯器的實現,它可能等同于 signed char 或 unsigned char。如果用于存儲小整數,應明確指定 signed 或 unsigned。
在MCU開發中通常使用UI_8、I_8表示C語言中8位的無符號、有符號數據類型。增強工程的可移植性。避免工程師在不同系統下對存儲空間大小認知存在偏差導致bug。

int (整型)

用途:最常用的整數類型,用于存儲通用整數。
大小:通常為系統字長4字節或者2字節(例如,在 32/64 位系統上通常是 4 字節,部分MCU系統中為2字節)。
范圍:至少 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647。
signed int (或直接寫 int,signed通常可忽略):有符號。
unsigned int:無符號,范圍至少 0 到 65,535 或 0 到 4,294,967,295。

在MCU開發中通常使用UI_32、I_32表示C語言中32位的無符號、有符號數據類型。增強工程的可移植性。避免工程師在不同系統下對存儲空間大小認知存在偏差導致bug。

short (短整型)

用途:用于節省空間的較小整數,范圍比 int 小。

大小:至少 2 字節。

signed short : -32,768 到 32,767
unsigned short: 0 到 65,535

在MCU開發中通常使用UI_16、I_16表示C語言中16位的無符號、有符號數據類型。增強工程的可移植性。避免工程師在不同系統下對存儲空間大小認知存在偏差導致bug。

long (長整型)

用途:存儲大范圍的整數。

大小:至少 4 字節,部分系統可能是8字節。

signed long:-2,147,483,648 到 2,147,483,647(4字節時)
unsigned long: 0 到 4,294,967,295(4字節時)

long long (C99標準引入)

long long (C99標準引入)

用途:存儲非常大范圍的整數。

大小:至少 8 字節

signed long long:0 到 18,446,744,073,709,551,615
unsigned long long:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

在MCU開發中通常使用UI_64、I_64表示C語言中64位的無符號、有符號數據類型。增強工程的可移植性。避免工程師在不同系統下對存儲空間大小認知存在偏差導致bug。

圖片匯總

圖片來自菜鳥教程:
菜鳥教程
在這里插入圖片描述
在這里插入圖片描述

b. 浮點類型 (Floating-Point Types)

用于存儲實數(帶小數點的數)。
注意:<float.h> 頭文件定義了這些類型的精度和范圍(如 FLT_DIG, DBL_MAX 等)。

float (單精度浮點型)

大小:通常為 4 字節。

精度:約 6-7 位有效數字。

后綴:字面量后綴 f 或 F,例如 3.14f。

double (雙精度浮點型)

大小:通常為 8 字節。

精度:約 15-16 位有效數字。

說明:C 語言中默認的浮點數字面量(如 3.14)都是 double 類型。

long double (長雙精度浮點型)

大小:通常為 8、12 或 16 字節,取決于實現。

精度:提供比 double 更高的精度和范圍。

圖片匯總

圖片來自菜鳥教程:
菜鳥教程
在這里插入圖片描述

2. 枚舉類型 (Enumeration Type) - enum

用于定義一組命名的整數常量,使代碼更易讀。
枚舉變量在C語言中相當于是一個范圍限制的整數型,將同一層級同一概念的值封裝在一個枚舉類型中,提高代碼可讀性,使用時相當于宏定義。

// 定義了一個枚舉類型 enum Color
enum Color {RED,    // 默認值為 0GREEN,  // 默認值為 1BLUE    // 默認值為 2
};// 聲明一個枚舉變量
enum Color myColor = GREEN;
printf("%d\n", myColor); // 輸出 1// 可以顯式指定值
enum Status {ERROR = -1,SUCCESS = 0,PENDING = 1
};

3. void 類型

void 類型表示“無”或“空”。

1、作為函數返回類型

表示函數不返回任何值。

void sayHello() {printf("Hello\n");// 無需 return 語句,或使用 return;
}

2、作為函數參數

表示函數不接受任何參數。

int getRandomNumber(void) { // 明確表示無參數return rand();
}

3、作為指針類型(萬能指針)

void* 是一種通用指針類型,可以指向任何數據類型的數據。在使用前必須進行強制類型轉換。

int num = 10;
void *ptr = &num; // 合法// printf("%d\n", *ptr); // 錯誤:void* 不能直接解引用
printf("%d\n", *((int*)ptr)); // 正確:先轉換為 int*

4. 派生類型 (Derived Types)

這些類型是從基本類型或其它派生類型構造而來的。

a. 指針類型 (Pointer Types)

存儲變量的內存地址。聲明時在類型名后加 *。

int num = 10;
int *ptr = &num; // ptr 是一個指向 int 的指針,存儲了 num 的地址printf("%d\n", *ptr); // 解引用指針,獲取它指向的值(輸出 10

b. 數組類型 (Array Types)

存儲相同類型的元素的集合。聲明時在變量名后加 [size]。

int numbers[5] = {1, 2, 3, 4, 5}; // 包含 5 個整數的數組
char str[] = "Hello"; // 編譯器自動計算大小的字符數組(字符串)

c. 結構體類型 (Structure Type) - struct

將多個不同類型的變量組合成一個單一的復合類型。

// 定義了一個結構體類型 struct Person
struct Person {char name[50];int age;float height;
};// 聲明一個結構體變量并初始化
struct Person p1 = {"Alice", 30, 165.5};// 訪問成員
printf("Name: %s, Age: %d\n", p1.name, p1.age);

d. 共用體類型 (Union Type) - union

允許在同一內存位置存儲不同的數據類型。所有成員共享同一塊內存,大小由最大的成員決定。

union Data {int i;float f;char str[20];
};union Data data;
data.i = 10; // 現在 data 存儲的是一個整數
data.f = 220.5; // 寫入一個浮點數,會覆蓋之前的整數
// 此時讀取 data.i 將是無意義的值

e. 函數類型 (Function Types)

函數也有類型,由其返回類型和參數類型決定。這在函數指針中非常有用。

// 一個函數類型:返回 int,接受兩個 int 參數
int add(int a, int b) {return a + b;
}// 聲明一個匹配該類型的函數指針
int (*funcPtr)(int, int) = add;// 通過函數指針調用函數
int result = funcPtr(3, 4); // result = 7

類型限定符 (Type Qualifiers)

為類型提供額外的屬性。
1、const:定義常量,值在初始化后不能被修改。

const int max_size = 100;
// max_size = 200; // 編譯錯誤!

2、volatile:告訴編譯器該變量可能被程序之外的代理(如硬件、中斷)修改,禁止編譯器做某些優化。

volatile int hardware_register;

3、restrict (C99):一個指針限定符,向編譯器承諾,在該指針的生命周期內,它是訪問其所指向數據的唯一方式,從而允許編譯器進行優化。

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

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

相關文章

本搭建烏云漏洞庫

1.下載鏡像站文件&#xff0c;并拖入虛擬機 2.將bugs.rar解壓至網站根目錄下 /var/www/html 3.配置bugs/conn.php 4.在bugs下創建upload目錄&#xff0c;將10-14、15-a、15-b、16壓縮包文件解壓到該upload目錄 5.把wooyun.rar解壓到 /mysql/data/wooyun目錄下 6.配置hosts文件后…

Vmware虛擬機 處理器配置選項配置介紹

1. 處理器配置選項好&#x1f44c;&#xff0c;我來幫你逐一解讀 VMware 里 虛擬機處理器 這些選項的含義。 你截的圖里&#xff0c;主要有三塊內容&#xff1a; 處理器數量 每個處理器的內核數量 ©虛擬化引擎1?? 處理器數量 這是分配給虛擬機的 邏輯 CPU 插槽數。一般…

day40-tomcat

1.每日復盤與今日內容1.1復盤keepalived高可用配置搶占式與非搶占式腦裂keepalived處理Nginx掛掉1.2今日內容部署、安裝、配置tomcat(systemctl)Tomcat主配置文件部署靜態頁部署zrlog&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;接入負載均衡掛載到NFS2…

【RA-Eco-RA4E2-64PIN-V1.0 開發板】步進電機的串口控制

【RA-Eco-RA4E2-64PIN-V1.0 開發板】步進電機的串口控制 本文介紹了 RA-Eco-RA4E2-64PIN-V1.0 開發板通過串口指令實現 28BYJ-48 步進電機旋轉角度和速度的精確控制的項目設計。 項目介紹 硬件連接&#xff1a;28BYJ-48 步進電機、ULN2003 驅動板、Jlink 調試器、供電電源等&am…

PiscCode基于 Mediapipe 的人體多模態關鍵點檢測與可視化系統 —— HumanMultiLandmarker 深度解析

一、引言 在計算機視覺領域&#xff0c;人體關鍵點檢測&#xff08;Human Pose Estimation&#xff0c;HPE&#xff09;一直是研究和應用的熱點方向之一。隨著深度學習與實時圖像處理技術的發展&#xff0c;人體姿勢估計已經從傳統的 2D 檢測走向了 3D 空間建模&#xff0c;并…

文獻閱讀筆記【物理信息機器學習】:Physics-informed machine learning

文獻閱讀筆記&#xff1a;Physics-informed machine learningSummaryResearch ObjectiveBackground / Problem Statement問題背景研究現狀需解決的問題問題出現的原因分析問題解決思路Method(s)問題建模作者解決問題的方法/算法1. 觀測偏差&#xff08;Observational Biases&am…

Linux服務環境搭建指南

實驗拓撲概述**實驗拓撲&#xff1a; APPSRV&#xff1a; 主機名&#xff1a;appsrv.example.com ip地址&#xff1a;192.168.100.10 網關&#xff1a;192.168.100.254 網卡為NAT模式 STORAGESRV&#xff1a; 主機名&#xff1a;storagesrv.example.com ip地址&#xff1a;192.…

[特殊字符] 數據庫知識點總結(SQL Server 方向)

一、數據庫基礎概念數據庫&#xff08;Database&#xff09;&#xff1a;存儲和管理數據的容器。數據表&#xff08;Table&#xff09;&#xff1a;以行和列形式組織數據。行&#xff08;Row&#xff09;&#xff1a;一條記錄。列&#xff08;Column&#xff09;&#xff1a;字…

【PSINS工具箱】MATLAB例程,二維平面上的組合導航,EKF融合速度、位置和IMU數據,4維觀測量

文章目錄關于工具箱程序簡介代碼概述核心功能與步驟運行結果MATLAB代碼關于工具箱 本文所述的代碼需要基于PSINS工具箱&#xff0c;工具箱的講解&#xff1a; PSINS初學指導&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 本文為二維平面上的定位&am…

MiMo-VL 技術報告

摘要 我們開源了 MiMo-VL-7B-SFT 和 MiMo-VL-7B-RL 兩個強大的視覺語言模型,它們在通用視覺理解和多模態推理方面均展現出最先進的性能。MiMo-VL-7B-RL 在 40 項評估任務中的 35 項上優于 Qwen2.5-VL-7B,并在 OlympiadBench 上獲得 59.4 分,超越了參數量高達 780 億的模型。…

CTFshow Pwn入門 - pwn 19

先看main函數&#xff1a;fclose(_bss_start) fclose(stdout) 關閉了默認fd1的輸出&#xff0c;所以system的結果無法直接看到。 思路&#xff1a; 輸出重定向。 ls 1>&0 ls >&0 ls >&2 ###三種寫法均可將輸出重定向到能回顯的終端并獲得一個新的交互…

Redis(以Django為例,含具體操作步驟)

簡介Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的內存數據結構存儲系統&#xff0c;支持多種數據結構&#xff08;如字符串、哈希、列表、集合、有序集合等&#xff09;&#xff0c;可用作數據庫、緩存或消息隊列。其核心特點包括&#xff1a;高性能&am…

瀏覽器解析網址的過程

問題瀏覽器解析網址的過程我的回答當你在瀏覽器地址欄輸入一個URL&#xff08;比如www.example.com&#xff09;并按下回車后&#xff0c;會發生以下一系列步驟&#xff1a;首先&#xff0c;瀏覽器會解析URL結構&#xff0c;確定要訪問的協議、域名和路徑。如果你沒有輸入協議部…

NVIDIA Nsight Systems性能分析工具

* 性能分析 NVIDIA Nsight Systems (推薦)&#xff1a; 這是 NVIDIA 官方推薦的更現代、功能更強大的分析工具。 安裝 Nsight Systems在 Docker 容器中啟動程序&#xff1a;# 確保你在啟動容器時掛載了/usr/local/cuda/targets/x86_64-linux/lib/ 和 /usr/local/nvidia/lib64 #…

后臺管理系統-14-vue3之tag標簽頁的實現

文章目錄 1 tag靜態實現 1.1 CommonTag.vue(el-tag) 1.2 Main.vue(普通組件標簽) 2 tag通過pinia管理 2.1 CommonAside.vue(菜單點擊事件) 2.2 stores/index.js(selectMenu()和tags) 2.3 CommonTag.vue(計算屬性tags) 3 點擊tag之后跳轉到指定頁面 3.1 views/Mail.vue(商品) 3.…

CMake2: CMakeLists.txt的常用命令

參考鏈接: 愛編程的大丙 | CMake教程 CMakeLists指令以及常用方法 現代 CMake 教程 文章目錄1. cmake_minimum_required( )2. project( )3. add_executable( )4. set()5. aux_source_directory( )6. file( )7. include_directories( )8. add_library( )9. link_libraries()與li…

Ansible入門:自動化運維基礎

Ansible 基礎概念與安裝1. 自動化動機 (Motivation for Automation)概念解釋&#xff1a; 指為什么要用Ansible等工具來替代手動管理服務器。核心動機包括&#xff1a;效率與速度&#xff1a; 同時在上百甚至上千臺服務器上執行任務&#xff0c;秒級完成&#xff0c;遠非人工可…

【測試】基于博客系統的測試報告

前言 本篇博客對簡易的博客系統做的測試總結一份測試報告&#xff0c;包含功能測試&#xff0c;自動化測試&#xff0c;性能測試 &#x1f493; 個人主頁&#xff1a;zkf ? 文章專欄&#xff1a;測試 若有問題 評論區見&#x1f4dd; &#x1f389;歡迎大家點贊&#x1f44d;…

Oracle:配置讓插入語句時id自動輸入

Oracle:配置讓插入語句時id自動輸入無需手動指定&#xff0c;核心是利用 序列&#xff08;Sequence&#xff09; 或 自增列&#xff08;Identity Column&#xff09; 來自動生成唯一值。以下是兩種常用方案&#xff1a;方案 1&#xff1a;使用序列&#xff08;Sequence&#xf…

秒殺服務的回調方案

在秒殺場景中&#xff0c;用戶點擊“搶購”后&#xff0c;后端需要通過異步處理應對高并發&#xff08;避免請求阻塞&#xff09;&#xff0c;同時需通過實時回調機制將最終結果&#xff08;成功/失敗&#xff09;推送給客戶端并展示。核心方案是&#xff1a;“前端發起請求→后…