【C語言】(9)—指針3

文章目錄

  • 一、字符指針的深入理解
  • 二、數組指針詳解
  • 三、二維數組傳參的本質
  • 四、函數指針及其應用
  • 五、函數指針數組與轉移表

一、字符指針的深入理解

1.1 字符指針的基本使用
字符指針(char*)是指向字符類型數據的指針,它有兩種常見的使用方式:

// 方式一:指向單個字符
char ch = 'w';
char *pc = &ch;
*pc = 'a';  // 修改ch的值為'a'// 方式二:指向字符串常量
const char* pstr = "hello bit";
printf("%s\n", pstr);  // 輸出: hello bit

1.2 字符串常量的存儲特性
需要特別注意第二種使用方式中字符串常量的存儲特性:

const char *str3 = "hello bit";
const char *str4 = "hello bit";if(str3 == str4) {printf("str3和str4指向同一地址\n");
} else {printf("str3和str4指向不同地址\n");
}

二、數組指針詳解

2.1 數組指針的定義
數組指針是指向整個數組的指針,而不是指向數組元素的指針。它的定義方式如下:

int arr[10] = {0};
int (*p)[10] = &arr;  // p是指向包含10個int元素的數組的指針

理解數組指針的關鍵在于運算符優先級:

[]的優先級高于*

因此int *p[10]表示指針數組(包含10個int指針的數組)

而int (*p)[10]表示數組指針(指向包含10個int元素的數組的指針)

2.2 數組指針的使用示例

#include <stdio.h>int main() {int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int (*p)[4] = arr;  // 指向第一行(一個包含4個int的數組)for(int i=0; i<3; i++) {for(int j=0; j<4; j++) {printf("%2d ", *(*(p+i)+j));  // 等價于p[i][j]}printf("\n");}return 0;
}

三、二維數組傳參的本質

3.1 二維數組的內存布局
二維數組實際上是"數組的數組",在內存中按行優先順序連續存儲。例如:

int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}
};

3.2 二維數組傳參的兩種形式
形式一:使用二維數組語法

void printArray(int arr[][4], int rows) {for(int i=0; i<rows; i++) {for(int j=0; j<4; j++) {printf("%d ", arr[i][j]);}printf("\n");}
}

形式二:使用數組指針語法

void printArray(int (*arr)[4], int rows) {for(int i=0; i<rows; i++) {for(int j=0; j<4; j++) {printf("%d ", *(*(arr+i)+j));}printf("\n");}
}

四、函數指針及其應用

4.1 函數指針的基本概念
函數指針是指向函數的指針變量,它存儲的是函數的入口地址:

#include <stdio.h>int add(int a, int b) {return a + b;
}int main() {int (*pf)(int, int) = add;  // 等價于 &addprintf("%d\n", pf(2, 3));    // 輸出: 5printf("%d\n", (*pf)(3, 5)); // 輸出: 8return 0;
}

4.2 函數指針的類型解析
函數指針類型的組成:

返回類型:int

指針名稱:pf

參數類型:(int, int)

因此int (*pf)(int, int)表示:

pf是一個指針

指向一個返回int并接受兩個int參數的函數

五、函數指針數組與轉移表

5.1 函數指針數組的定義
函數指針數組是存儲多個函數指針的數組,可用于實現"轉移表":

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int div(int a, int b) { return a / b; }int (*funcArray[4])(int, int) = {add, sub, mul, div};

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

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

相關文章

MDK調試技巧

1、自動生成反匯編 fromelf -c -o "$LL.txt" "#L" 解釋&#xff1a; 1、fromelf 是 ARM Compiler 工具鏈中的一個命令行工具&#xff0c;從fromelf這個名字上我們就能看到它是用來處理elf文件的&#xff0c;elf 全稱 Executable and Linking Format &…

嵌入式STM32學習——433M無線遙控燈

1.433M無限模塊工作原理&#xff1a; 數據發射模塊的工作頻率為315M&#xff0c;采用聲表諧振器SAW穩頻&#xff0c;頻率穩定度極高&#xff0c;當環境溫度在-25~85度之間變化時&#xff0c;頻飄僅為3ppm。 接收到信號&#xff0c;接收模塊對應針腳輸出高電平&#xff0c;有DO…

JDBC工具類的三個版本

一、JDBC連接數據庫的7個步驟 1、加載驅動 2、獲取連接 3、編寫sql 4、獲取執行sql的stmt對象 有兩種 stmt&#xff08;存在sql注入問題 字符串拼接&#xff09; pstmt&#xff08;預編譯可以防止sql注入&#xff09; 5、執行sql 拿到結果集 6、遍歷結果集 7、關閉資源…

3.1/Q1,Charls最新文章解讀

文章題目&#xff1a;Predictive model for sarcopenia in chronic kidney disease: a nomogram and machine learning approach using CHARLS data DOI&#xff1a;10.3389/fmed.2025.1546988 中文標題&#xff1a;慢性腎病肌肉減少癥的預測模型&#xff1a;使用 CHARLS 數據的…

DEEPPOLAR:通過深度學習發明非線性大核極坐標碼(2)

目錄 2.問題的提出和背景 2.1 信道編碼 2.2.極化碼 極坐標編碼 極坐標解碼 原文&#xff1a;《DEEPPOLAR: Inventing Nonlinear Large-Kernel Polar Codes via Deep Learning》 2.問題的提出和背景 2.1 信道編碼 信道編碼是一種為傳輸添加冗余的技術&#xff0c;使其對…

手機當電腦播放器 soundwire

soundwire server免費下載_soundwire serverPC下載_3DM軟件 win11可用延遲1秒 安卓端音頻緩沖區大小改成8k延遲就沒那么夸張了 我用audiorelay連上了沒聲音

LVGL中的事件

文章目錄 &#x1f9f1; 一、什么是 LVGL 事件&#xff1f;&#x1f3af; 二、事件回調的注冊參數解釋&#xff1a;示例&#xff1a; &#x1f4da; 三、常見事件類型&#xff08;lv_event_code_t&#xff09;? 1. 輸入類事件&#xff08;用戶交互&#xff09;? 2. 組件狀態類…

警惕C#版本差異多線程中的foreach陷阱

警惕C#版本差異多線程中的foreach陷阱? 同樣的代碼,不同的結果閉包捕獲的“時間差”問題繞過閉包陷阱的三種方法Lambda立即捕獲(代碼簡潔)顯式傳遞參數(兼容性最佳)使用Parallel.ForEach(官方推薦)注意事項:版本兼容性指南警惕多線程中的foreach陷阱:C#版本差異引發的…

mac u盤重裝mac10.15Catalina系統

我的電腦提mac2017的air 重裝過程 (文件夾中間有空格時為 Install\ macOS\ Catalina 才行) &#xff08;有需要的&#xff0c;最好做一下備份&#xff0c;有些東西可以及時找到配置和文件之類的&#xff0c; u盤制作是在mac電腦上操作的) 一、先下載系統鏡像文件或自行到官方…

說說es配置項的動態靜態之分和集群配置更新API

這天因為某件工作來到了es官網某個參數配置相關的頁面&#xff0c;注意到了下圖圓圈里的“Dynamic”&#xff1a; 鏈接&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cluster.html#misc-cluster-settings 顯然這是對配置項的一個描述&am…

2025軟考【系統架構設計師】:兩周極限沖刺攻略(附知識點解析+答題技巧)

距離2025上半年“系統架構設計師”考試已經只剩最后兩周了&#xff0c;還沒有準備好的小伙伴趕緊行動起來。為了幫助大家更好的沖刺學習&#xff0c;特此提供一份考前沖刺攻略。本指南包括考情分析、答題技巧、注意事項三個部分&#xff0c;可以參考此指南進行最后的復習要領&a…

web animation API 鋒利的css動畫控制器 (更新中)

什么是web animation api 以及為什么要使用web animation api&#xff1f; web animation API 是web頁面中控制DOM元素動畫效果的javascript原生API。 它能夠逐個關鍵幀控制動畫效果&#xff0c;具有Timeline 機制?能通過javascript來實現動畫的暫停&#xff0c;播放&#x…

Linux基礎io知識

理解 "文件" 狹義理解 文件在磁盤里 磁盤是永久性存儲介質&#xff0c;因此文件在磁盤上的存儲是永久性的 磁盤是外設&#xff08;即是輸出設備也是輸入設備&#xff09; 磁盤上的文件 本質是對文件的所有操作&#xff0c;都是對外設的輸入和輸出 簡稱 IO 廣義理解…

視頻編解碼學習三之顯示器續

一、現在主流的顯示器是LCD顯示器嗎&#xff1f; 是的&#xff0c;現在主流的顯示器仍然是 LCD&#xff08;液晶顯示器&#xff0c;Liquid Crystal Display&#xff09;&#xff0c;但它已經細分為多種技術類型&#xff0c;并和其他顯示技術&#xff08;如OLED&#xff09;形成…

[測試]并發模擬工具Apache Bench 進行AB壓力測試

下載(windows) https://www.apachelounge.com/download/ 下載后解壓&#xff0c;解壓后進入bin目錄&#xff0c;打開CMD&#xff0c;即可使用 命令 ab.exe -n 請求總數 -c 并發數 http://網站/ 比如ab.exe -n 1000 -c 100 http://127.0.0.1:5555/ 看不懂的話直接把結果讓AI分析…

LeetCode 熱題 100 138. 隨機鏈表的復制

LeetCode 熱題 100 | 138. 隨機鏈表的復制 大家好&#xff0c;今天我們來解決一道經典的鏈表問題——隨機鏈表的復制。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求深拷貝一個帶有隨機指針的鏈表。 問題描述 給你一個長度為 n 的鏈表&#xff0c;每個節點包含一個額…

開源分享:TTS-Web-Vue系列:Vue3實現固定頂部與吸頂模式組件

&#x1f3af; 本文是TTS-Web-Vue系列的第十三篇文章&#xff0c;重點介紹項目中固定頂部導航和內容區域吸頂模式的實現方案。通過這些優化&#xff0c;我們大幅提升了用戶在滾動頁面時的交互體驗&#xff0c;使關鍵操作區域始終可見&#xff0c;同時實現了更現代化的界面視覺效…

Docker、Docker-compose、K8s、Docker swarm之間的區別

1.Docker docker是一個運行于主流linux/windows系統上的應用容器引擎&#xff0c;通過docker中的鏡像(image)可以在docker中構建一個獨立的容器(container)來運行鏡像對應的服務&#xff1b; 例如可以通過mysql鏡像構建一個運行mysql的容器&#xff0c;既可以直接進入該容器命…

用瀏覽器打開pdf,如何使用劃詞翻譯?

1. 瀏覽器 | 擴展 | 獲取 Microsoft Edge 擴展 2. 搜索 “沙拉查詞” 點擊“獲取” 3. 擴展這里選擇 管理擴展 勾選 “允許訪問文件url” 注&#xff1a;這里一定要勾選&#xff0c;否則沙拉查詞無法訪問.pdf 文件&#xff01;&#xff01;&#xff01;會出現下圖錯誤 4. 右擊…

深入解析STM32中斷機制:從原理到外部中斷實戰

知識點1【中斷的介紹】 單片機的中斷——硬件中斷 Linux操作系統的中斷——軟件中斷 中斷是指計算機運行過程中&#xff0c;出現某種意外情況需要主機干預&#xff0c;機器能自動停止正在運行的程序并轉入處理新情況的程序&#xff0c;處理完畢后有返回原本暫停的程序繼續運…