收集飛花令碎片——C語言關鍵字typedef

在C語言的指針章節中,我們講到函數指針模塊
在函數指針中,有一個重要的關鍵字:typedef

typedef關鍵字

  • 作用
  • 基本語法
  • 重難點:對數組指針與函數指針的重命名
    • 數組指針重命名
      • 一維數組指針重命名
      • 遍歷二維數組
    • 函數指針重命名

作用

typedef是用來類型重命名的,將復雜的類型簡單化

重要提示:typedef并不創建新的數據類型,它只是給現有的類型起了一個“外號”。編譯器會把它和原始類型視為完全相同的類型。



基本語法

typedef existing_type new_type_name;
  • existing_type:任何已有的基本數據類型(如int, float)或復合數據類型(如結構體、枚舉、指針、數組)。

  • new_type_name:你為這個類型定義的新的名稱。


typedef unsigned int UINT;
typedef char BYTE;UINT count = 10; // 等價于 unsigned int count = 10;
BYTE letter = 'A'; // 等價于 char letter = 'A';

你的程序將來需要將UINTunsigned int改為unsigned long,你只需要修改typedef這一行代碼即可,而不需要修改所有聲明變量的地方。



重難點:對數組指針與函數指針的重命名



數組指針重命名

比如我們有數組指針類型 int(*)[5] ,需要重命名為 parr_t,那可以這樣寫:

typedef int(*parr_t)[5]; //新的類型名必須在*的右邊


一維數組指針重命名

#include <stdio.h>int main() {int arr[5] = {10, 20, 30, 40, 50};// 為"指向包含5個int的數組的指針"創建別名typedef int (*IntArray5Ptr)[5];// 使用該類型聲明指針IntArray5Ptr ptr = &arr; // 注意:這里取整個數組的地址// 通過指針訪問數組元素printf("第一個元素: %d\n", (*ptr)[0]);printf("第三個元素: %d\n", (*ptr)[2]);// 也可以這樣訪問printf("最后一個元素: %d\n", (*ptr)[4]);return 0;
}

遍歷二維數組

#include <stdio.h>int main() {int matrix[2][3] = {{1, 2, 3},{4, 5, 6}};// 為"指向包含3個int的數組的指針"創建別名typedef int (*RowPtr)[3];// 使用該類型聲明指針,指向第一行RowPtr ptr = matrix;printf("二維數組內容:\n");for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("%d ", (*ptr)[j]); // 訪問當前行的元素}printf("\n");ptr++; // 移動到下一行}return 0;
}


函數指針重命名

基本語法:

 typedef 返回類型 (*新類型名)(參數列表);
#include <stdio.h>// 定義一個函數指針類型
typedef int (*MathFunc)(int, int);// 實際函數
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int main() {// 使用類型別名聲明函數指針MathFunc func = add;printf("加法結果: %d\n", func(5, 3));func = subtract;printf("減法結果: %d\n", func(5, 3));return 0;
}

在這里插入圖片描述

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

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

相關文章

基于Spring Boot的家政服務管理系統+論文示例參考

1.項目介紹 系統角色&#xff1a;管理員、家政服務、服務人員功能模塊&#xff1a;用戶管理、服務人員、服務類型、家政服務、服務預約、接單信息、服務記錄、評價信息、反饋投訴等技術選型&#xff1a;SpringBoot&#xff0c;Vue等測試環境&#xff1a;idea2024&#xff0c;jd…

AI助力HTML5基礎快速入門:從零開始理解網頁結構

前言 作為一名前端開發初學者&#xff0c;理解HTML的基本結構是你踏入Web開發世界的第一步。HTML&#xff08;超文本標記語言&#xff09;是構建網頁的基礎&#xff0c;就像蓋房子需要先搭建好框架一樣&#xff0c;學習HTML就是學習如何構建網頁的基本骨架。今天&#xff0c;我…

實現調用libchdb.a靜態連接庫中的未公開導出函數

前文寫了調用libchdb.so動態連接庫中的未公開導出函數的方法&#xff0c;不久前chdb發布了3.6版&#xff0c;其中提供了靜態鏈接庫。 嘗試編譯一個不依賴龐大動態連接庫libchdb.so的程序&#xff0c;獲得了成功&#xff0c;以下是操作步驟。 1.下載chdb靜態連接庫 wget https:…

HTTPS 端口號詳解 443 端口作用、iOS 抓包方法、常見 HTTPS 抓包工具與網絡調試實踐

在現代互聯網中&#xff0c;幾乎所有移動應用和網站都使用 HTTPS 協議 來保障數據安全。而 HTTPS 的默認端口就是 443。相比 HTTP 的 80 端口&#xff0c;443 不僅增加了 SSL/TLS 加密&#xff0c;還涉及到證書驗證和加密握手&#xff0c;這使得開發者在進行 HTTPS 抓包 時面臨…

【Python系列PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘pyqt5’問題

【Python系列PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘pyqt5’問題 摘要 在日常Python開發中&#xff0c;使用PyCharm控制臺執行pip install時經常會遇到ModuleNotFoundError: No module named pyqt5等類似報錯。這類報錯不僅…

“可信資產IPO +數鏈金融RWA” 鏈改2.0六方共識(深圳)

“可信資產IPO 數鏈金融RWA”鏈改2.0六方共識【2025年8月30日 深圳】全球數鏈金融的建設者、創新者與決策者&#xff1a;我們——來自“生態、項目、資金、合規、技術、行業”六方領域的實踐者&#xff0c;在鏈改1.0的基礎上于深圳達成鏈改2.0時代核心共識&#xff1a;以“可信…

華為云 GaussDB:金融級高可用數據庫,為核心業務保駕護航

一、文檔概述在數字化浪潮席卷全球的當下&#xff0c;數據已成為企業發展的核心戰略資產&#xff0c;而數據庫作為數據存儲、管理與交互的核心載體&#xff0c;其穩定性、可靠性與安全性直接決定了企業業務的連續性與競爭力。尤其在對數據準確性、業務連續性要求近乎苛刻的金融…

Docker快速入門手冊

文章目錄一、安裝驗證是否安裝成功二、Docker命令鏡像容器數據卷管理網絡模式三、Dockerfile推送至鏡像倉庫阿里云ECI彈性容器部署阿里云Serverless應用引擎SAE部署阿里云FC函數部署容器四、Docker Compose::: tip 簡介Docker是一種開源的應用容器引擎&#xff0c;讓開發者能夠…

Golang并發編程及其高級特性

并發編程模型 線程模型&#xff1a;Go的GoroutineGoroutine&#xff08;M:N 模型&#xff09; package mainimport ("fmt""runtime""sync""time" )func main() {// 查看當前機器的邏輯CPU核心數&#xff0c;決定Go運行時使用多少OS線程…

弧形導軌如何提升新能源汽車的能效和續航里程?

弧形導軌在新能源汽車中的應用主要集中在電池生產線和自動化裝配線等領域&#xff0c;通過提高生產效率和精度&#xff0c;間接提升新能源汽車的能效和續航里程。高精度裝配&#xff1a;在新能源汽車的電池生產線中&#xff0c;弧形導軌用于高精度的自動化裝配設備&#xff0c;…

考研擇校考慮因素和備考流程

考研擇校一、選擇專業二、選擇學校三、考研計劃安排一、選擇專業 1、了解自己的未來工作規劃&#xff08;這里肯定沒有啥規劃&#xff09;&#xff1b; 2、連接考研的相關幾個專業哪個好就業&#xff08;公務員和找工作&#xff09;&#xff1b; 3、知乎、小紅書、deepseek都可…

1.13 Memory Profiler Package - Unity Objects(unity對象頁簽)

1.Unity Objects(Unity對象頁簽)簡介 2.界面功能參數1.Unity Objects(Unity對象頁簽)簡介 Unity Objects用于快速定位unity對象內存占用的類型和具體實例a.查找內存占用最大的資源, 判斷這些資源是否可以壓縮或延遲加載b.查找重復加載的資源c.查看運行時創建但是沒有釋放的資源…

Android真機-安裝Reqable證書-抓SSL包

使用Reqable的自動安裝系統證書無法正常抓包&#xff0c;所以就有了這篇文章超簡單的安裝方式 - 記得確保手機已擁有root權限一、從Reqable導出公鑰證書無需使用OpenSSL 將 .pem 文件轉換為 .0 格式注意是 .0 格式的這個證書二、推送證書到手機adb root adb remount adb push 證…

[超表面論文快訊-242] PR-微波超四元數渦旋陣列洛書加權鎖定成像加密-江南大學王繼成、上海科技大學王雄團隊

欄目介紹&#xff1a; “論文快訊”欄目旨在精簡地分享一周內發表在高水平期刊上的Metasurface領域研究成果&#xff0c;幫助讀者及時了解領域前沿動態&#xff0c;如果對專欄的寫法或內容有什么建議歡迎留言&#xff0c;后續會陸續開啟其他專欄&#xff0c;敬請期待。 論文基…

案例研究:構建一個 Markdown 編輯器

引言&#xff1a;Markdown 編輯器案例在 Electron Node.js 開發中的研究價值與必要性 在 Electron 框架的實際項目應用中&#xff0c;構建一個 Markdown 編輯器是展示其強大能力的經典案例研究。它不僅僅是一個簡單的文本工具&#xff0c;更是開發者通過完整項目演示 Electron…

十四十五. 圖論

樹與圖的存儲 樹是一種特殊的圖,與圖的存儲方式相同。 對于無向圖中的邊ab,存儲兩條有向邊a->b, b->a。 因此我們可以只考慮有向圖的存儲。 (1) 鄰接矩陣:g[a][b] 存儲邊a->b (2) 鄰接表: // 對于每個點k,開一個單鏈表,存儲k所有可以走到的點。h[k]存儲這個單…

內存管理這一塊

文章目錄前言一、C/C內存分布二、C語言中動態內存管理方式三.C的內存管理方式new/delete操作內置類型new/delete操作自定義類型四.定位new總結前言 在一行一行的代碼之中&#xff0c;不同的數據存放的位置是有所不同的&#xff0c;正是因為這些數據的性質不同&#xff0c;所以…

linux 環境下Docker 安裝

Docker在線安裝 參考 &#xff1a;https://juejin.cn/book/6844733746462064654/section/6844733746545950734#heading-0 Ubuntu 環境下安裝 $ apt-get install apt-transport-https ca-certificates curl software-properties-common $ install -m 0755 -d /etc/apt/keyrin…

Netty從0到1系列之Netty啟動細節分析

文章目錄一、Netty服務器端啟動細節分析1.1 實現一個簡單的http服務器1.2 服務器端啟動細節分析1.3 創建與初始化 NioServerSocketChannel1.3.1 **通過反射工廠創建 Channel**&#xff1a;1.3.2 **初始化 Channel**1.4 注冊到 Boss EventLoopGroup1.4.1 **異步提交注冊任務**1.…

一個海康相機OCR的程序

這是一個極其復雜和龐大的??機器視覺檢測程序??&#xff0c;其核心特點是??多重冗余、條件判斷和流程分支??。它并非一個簡單的線性流程&#xff0c;而是一個為應對各種復雜工業場景&#xff08;如光照變化、產品位置偏移、識別難度高等&#xff09;而設計的??決策網…