C 深入指針(4)

目錄

一、字符指針變量

1 初始化

2 與字符串數組的區別

二、數組指針變量?

1 初始化

2 二維數組傳參本質

三、函數指針變量

1 初始化

2 用法?

四、typedef關鍵字

五、函數指針數組


一、字符指針變量

1 初始化

//VS2022 x64
#include <stdio.h>
int main()
{char* p = 'w';	//字符指針變量char* pc = "abcdef";	//pc 里存放的是字符串首元素的地址printf("%s", pc);	//輸出 abcdefreturn 0;
}

2 與字符串數組的區別

#include <stdio.h>
int main()
{char arr1[] = "abcd";char arr2[] = "abcd";char* pc1 = "abcd";char* pc2 = "abcd";if (arr1 == arr2)    //判斷存儲的地址是否一樣printf("arr1 和 arr2 一樣\n");elseprintf("arr1 和 arr2 不一樣\n");if(pc1 == pc2)    //判斷存儲的地址是否一樣printf("pc1 和 pc2 一樣\n");elseprintf("pc1 和 pc2 不一樣\n");return 0;
}//輸出
//arr1 和 arr2 不一樣
//pc1 和 pc2 一樣

?


二、數組指針變量?

1 初始化

#include <stdio.h>
int	main()
{//類比一下//整型指針變量int a = 10;int* p1 = &a;	//指針類型:int*int arr[5] = { 0,1,2,3,4 };//整型指針變量int* p = arr;	//指針類型:int* 指向數組首元素地址//數組指針變量int(*p)[5] = &arr;	//指針類型:int(*)[5] 指向整個數組地址return 0;
}

2 二維數組傳參本質

原來的格式

#include <stdio.h>
void func(int arr[3][3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d ", arr[i][j]);}printf("\n");}
}int main()
{int arr[3][3] = { {1,2,3},{2,3,4},{3,4,5} };func(arr);	//傳的是數組首元素地址return 0;
}

根據數組名是數組首元素的地址這個規則,二維數組的數組名表示的就是第一行的地址,是一維數組的地址。根據上面的例子,第一行的一維數組的類型就是?int[3] ,所以第一行的地址的類型就是數組指針類型 int(*)[3] 。那就意味著二維數組傳參本質上也是傳遞了地址,傳遞的是第一行這個一維數組的地址,那么形參也是可以寫成指針形式的。?

void func(int (*p)[3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d ", p[i][j]);	//等同于*( *(p + i) + j)}printf("\n");}
}int main()
{int arr[3][3] = { {1,2,3},{2,3,4},{3,4,5} };func(arr);return 0;
}

三、函數指針變量

1 初始化

函數是有地址的,函數名就是函數的地址,當然也可以通過 &函數名 的方式獲得函數的地址。

#include <stdio.h>
int Add(int a,int b)
{return a + b;
}int main()
{int a = 0;int b = 0;Add(a,b);int (*p1)(int, int) = &Add;int (*p2)(int,int) = Add;printf("%p\n", p1);printf("%p\n", p2);return 0;
}//輸出
//00007FF6EA2413CA
//00007FF6EA2413CA

2 用法?

通過函數指針調用指針指向的函數

#include <stdio.h>
int Add(int a, int b)
{return a + b;
}int main()
{int a = 5;int b = 5;int (*p1)(int, int) = Add;printf("%d\n", p1(a, b));    //等同于Add(a, b)return 0;
}//輸出
//10

四、typedef關鍵字

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

//將 unsigned int 重命名為 uint
typedef unsigned int uint;

但是對于數組指針和函數指針稍微有點區別:新的類型名必須在 * 的右邊

//將 int(*)[5] 重命名為 pa_int
typedef int(*pa_int)[5];
//將 int(*)(int, int) 重命名為pf_int
typedef int(*pf_int)(int, int);

五、函數指針數組

存放指針的數組稱為指針數組,存放函數指針的數組稱為函數指針數組

int(*pf[3])(int, int);

pf?先和 [ ] 結合,說明 pf 是數組,數組的內容是 int (*)(int, int) 類型的函數指針。


完?

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

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

相關文章

機器人非線性阻抗控制系統

機器人非線性控制系統本質上是一個復雜的控制系統&#xff0c;其狀態變量和輸出變量相對于輸入變量的運動特性不能用線性關系來描述。這種系統的形成基于兩類原因&#xff1a;一是被控系統中包含有不能忽略的非線性因素&#xff0c;二是為提高控制性能或簡化控制系統結構而人為…

人形機器人場景應用全解析,2024睿抗 AI ROBOT創新挑戰賽火熱報名中!

人工智能&#xff08;AI&#xff09;已成為推動科技革命和產業變革的關鍵力量。隨著大模型等AIGC技術的迅猛發展&#xff0c;AI正深刻改變我們的生活并重新定義生產方式。越來越多人期望將AI技術從純粹的思維和計算擴展到與物理世界的互動中&#xff0c;即發展具身智能。 為了推…

探索中國文本到視頻AI模型——Vidu

引言 隨著人工智能技術的不斷進步&#xff0c;我們見證了從文本到視頻內容生成的革命。最近&#xff0c;一個名為Vidu的中國文本到視頻AI模型引起了全球的關注。由清華大學和中國AI初創公司聲書科技聯合開發的Vidu&#xff0c;于2024年4月27日宣布&#xff0c;它聲稱能夠生成高…

測試周期記錄

測試周期是軟件開發生命周期中的一個重要環節&#xff0c;它包括單元測試、集成測試、系統測試和驗收測試等階段。本文將詳細介紹測試周期的各個階段及其重要性&#xff0c;幫助讀者更好地理解測試周期在軟件開發過程中的作用。 一、單元測試 單元測試是測試周期中的第一個階段…

個人工控方面收藏網址記錄(持續更新中)

1、OPC類 OPC Foundation GitHub Downloads - Unified Automation (unified-automation.com) 物聯網IoT協議之OPC UA快速入門教程 | 源碼先生的調試人生 (debugself.com) OPC Servers - OPC UA Migration - 100 Solutions by Matrikon (matrikonopc.com) Prosys OPC UA Simu…

k8s coredns配置

1.coredns可根據集群具體數量修改pod數&#xff0c;官方推薦比例為5/1&#xff0c;即有15臺服務器最好是3個pod。 2.coredns會繼承pod所在主機的dns解析,修改了主機的dns解析之后&#xff0c;coredns有一段時間的緩存&#xff0c;重啟coredns才會在集群內部立刻生效該解析。 …

SpringBoot3集成WebSocket

標簽&#xff1a;WebSocket&#xff0c;Session&#xff0c;Postman。 一、簡介 WebSocket通過一個TCP連接在客戶端和服務器之間建立一個全雙工、雙向的通信通道&#xff0c;使得客戶端和服務器之間的數據交換變得更加簡單&#xff0c;允許服務端主動向客戶端推送數據&#xf…

003_PyCharm的安裝與使用

如果你正在學習PyQt&#xff0c;本系列教程完全可以帶你入門直至入土。 所謂從零開始&#xff0c;就是從軟件安裝、環境配置開始。 不跳過一個細節&#xff0c;不漏掉一行代碼&#xff0c;不省略一個例圖。 IDE 開始學習一個編程語言&#xff0c;我們肯定是首先得安裝好它&…

std::funture和std::promise

#include <iostream> #include <thread> #include <future>void calculateResult(std::promise<int>& promiseObj) {// 模擬耗時計算std::this_thread::sleep_for(std::chrono::seconds(2));// 設置結果到 promise 中promiseObj.set_value(42); }i…

信息系統項目管理師——十大管理過程輸入、工具和技術、輸出(論文篇)二

六、項目風險管理 規劃風險管理 在撰寫關于“規劃風險管理”的論文時&#xff0c;這個過程是項目風險管理的第一步&#xff0c;旨在建立風險管理的框架&#xff0c;為整個項目周期內的風險識別、分析、應對和監控奠定基礎。以下是規劃風險管理過程中可能涉及的輸入、工具和技…

Python學習(五)異常處理

異常概念 異常的捕獲方法 try: f open("D:/abc.txt","r",encoding"UTF-8") except: print("出現異常了&#xff0c;因為文件不存在&#xff0c;我將open的模式&#xff0c;改為w模式去打開") f open("D:/abc.txt&qu…

Python代碼:十、字符串連接

1、題目 小明有兩個最好的朋友&#xff0c;他們的名字分別用input讀入記錄在兩個字符串中&#xff0c;請使用字符串連接&#xff08;&#xff09;幫助牛牛將兩個朋友的名字依次連接在一個字符串中輸出。 2、代碼 import sysstr1 input() str2 input() str3 str1 str2 pr…

從0到1:使用HuggingFace的管線加載Diffusion模型生成第一張圖像!

Hugging Face系列1&#xff1a;詳細剖析Hugging Face網站資源 前言本篇摘要1. Hugging Face Hub三大件1.1 模型1.1.1 模型簡介1.1.2 制作模型卡片1.1.3 模型下載和上傳1.1.4 模型應用 1.2 數據集1.2.1 數據集簡介1.2.2 調用代碼1.2.3 AutoTrain在線微調 1.3 Space應用1.3.1 內容…

理解 Python 中的 `super()` 與 `__init__()` 方法

在 Python 的面向對象編程中&#xff0c;super() 函數和 __init__() 方法是兩個非常重要的概念。它們在類的繼承和初始化過程中扮演著關鍵的角色。本文將深入探討這兩個概念的工作原理&#xff0c;并通過示例代碼來展示它們的使用。 基本原理 __init__() 方法 __init__() 是…

Vue中的全局事件總線:EventBus與$bus的比較詳解與實戰應用

EventBus實例&#xff1a; var EventBus new Vue() 會創建一個名為EventBus的Vue實例&#xff0c;并將其存儲在變量EventBus中。Vue.prototype.$bus new Vue() 則直接在Vue的原型上創建一個新的Vue實例&#xff0c;并將其賦值給$bus屬性。 使用方式&#xff1a; var EventBus…

C# 結合 JavaScript 對 Web 控件進行數據輸入驗證

目錄 關于數據驗證 范例運行環境 驗證設計 JavaScript 方法 設計 實現 調用示例 C# 方法 設計 實現 調用示例 小結 關于數據驗證 在 Web 應用的錄入界面&#xff0c;數據驗證是一項重要的實現功能&#xff0c;數據驗證是指確認 Web 控件輸入或選擇的數據&#xff…

類對象作為類成員

在C中&#xff0c;類對象可以作為另一個類的成員變量。這種設計方式可以用于創建復雜的對象結構&#xff0c;使得一個類的對象能夠包含另一個類的對象。這種嵌套類的組合方式可以增強代碼的可重用性和模塊化。 類對象作為類成員的示例 讓我們通過一個示例來解釋這一概念。假設…

武漢信息系統建設和服務能力評估CS認證咨詢

很多企業在咨詢信息系統建設和服務能力評估的時候喜歡百度搜索&#xff0c;不管是本地咨詢機構還是外地咨詢機構只要價格便宜就找誰&#xff0c;這個在低等級的CS1是可以這么操作的&#xff0c;一旦上升到CS2級別及以上的&#xff0c;我們一般不推薦找外地咨詢機構&#xff0c;…

【文末附gpt升級方案】字節跳動發布豆包大模型:AI領域的革新與引領

隨著科技的飛速進步&#xff0c;人工智能&#xff08;AI&#xff09;已逐漸成為推動社會發展的重要力量。在這一背景下&#xff0c;字節跳動公司以其前瞻性的眼光和創新能力&#xff0c;于XXXX年XX月XX日正式發布了豆包大模型&#xff0c;這一舉動無疑在AI領域掀起了新一輪的浪…

C語言.動態內存管理

動態內存管理 1.為什么要有動態內存分配2.malloc和free2.1malloc2.2free 3.calloc和realloc3.1calloc3.2realloc 4.常見的動態內存管理的錯誤4.1對NULL指針解引用操作4.2對動態開辟空間的越界訪問4.3對非動態開辟內存使用free釋放4.4使用free釋放一塊動態開辟內存的一部分4.5對…