C語言指針學習筆記

1. 指針的定義

指針(Pointer)是存儲變量地址的變量。在C語言中,指針是一種非常重要的數據類型,通過指針可以直接訪問和操作內存。

2. 指針的聲明與初始化

2.1 指針聲明

指針變量的聲明格式為:數據類型 *指針變量名;

int *ptr;    // 聲明一個指向int類型的指針
char *cptr;  // 聲明一個指向char類型的指針

2.2 指針初始化

指針變量初始化時,可以將變量的地址賦值給指針,使用地址運算符&

int a = 10;
int *ptr = &a; // 將變量a的地址賦值給指針ptr

3. 指針的使用

3.1 訪問指針所指向的變量

通過解引用運算符*可以訪問指針所指向的變量的值。

int a = 10;
int *ptr = &a;
printf("Value of a: %d\n", *ptr); // 輸出a的值

3.2 修改指針所指向的變量

通過指針可以修改指針所指向的變量的值。

int a = 10;
int *ptr = &a;
*ptr = 20; // 修改a的值為20
printf("Modified value of a: %d\n", a); // 輸出修改后的a的值

4. 指針的運算

指針可以進行算術運算,如加減操作,但要注意指針運算的結果依賴于指針指向的數據類型。

int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr;
printf("Value at ptr: %d\n", *ptr); // 輸出1
ptr++;
printf("Value at ptr after increment: %d\n", *ptr); // 輸出2

5. 指針數組與數組指針

5.1 指針數組

指針數組是一個數組,其元素是指針。

int a = 1, b = 2, c = 3;
int *arr[3] = {&a, &b, &c};
for (int i = 0; i < 3; i++) {printf("Value at arr[%d]: %d\n", i, *arr[i]);
}

5.2 數組指針

數組指針是指向數組的指針。

int arr[3] = {1, 2, 3};
int (*ptr)[3] = &arr;
for (int i = 0; i < 3; i++) {printf("Value at ptr[%d]: %d\n", i, (*ptr)[i]);
}

6. 函數指針

函數指針是指向函數的指針,可以通過函數指針調用函數。

#include <stdio.h>void hello() {printf("Hello, World!\n");
}int main() {void (*func_ptr)() = hello; // 聲明并初始化函數指針func_ptr(); // 通過函數指針調用函數return 0;
}

7. 指針與動態內存分配

在C語言中,可以使用malloccallocreallocfree函數進行動態內存分配和釋放。

#include <stdio.h>
#include <stdlib.h>int main() {int *ptr = (int*)malloc(sizeof(int) * 5); // 動態分配內存if (ptr == NULL) {printf("Memory allocation failed\n");return 1;}for (int i = 0; i < 5; i++) {ptr[i] = i + 1;}for (int i = 0; i < 5; i++) {printf("Value at ptr[%d]: %d\n", i, ptr[i]);}free(ptr); // 釋放內存return 0;
}

8. 常見指針錯誤

8.1 野指針

野指針指向未分配或已釋放的內存。

int *ptr;
*ptr = 10; // 未初始化指針,可能導致程序崩潰

8.2 空指針解引用

解引用空指針會導致程序崩潰。

int *ptr = NULL;
*ptr = 10; // 解引用空指針,可能導致程序崩潰

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

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

相關文章

DeepSeek R1生成圖片總結2(雖然本身是不能直接生成圖片,但是可以想辦法利用別的工具一起實現)

DeepSeek官網 目前階段&#xff0c;DeepSeek R1是不能直接生成圖片的&#xff0c;但可以通過優化文本后轉換為SVG或HTML代碼&#xff0c;再保存為圖片。另外&#xff0c;Janus-Pro是DeepSeek的多模態模型&#xff0c;支持文生圖&#xff0c;但需要本地部署或者使用第三方工具。…

什么是Dubbo?Dubbo框架知識點,面試題總結

本篇包含什么是Dubbo&#xff0c;Dubbo的實現原理&#xff0c;節點角色說明&#xff0c;調用關系說明&#xff0c;在實際開發的場景中應該如何選擇RPC框架&#xff0c;Dubbo的核心架構&#xff0c;Dubbo的整體架構設計及分層。 主頁還有其他的面試資料&#xff0c;有需要的可以…

kafka消費能力壓測:使用官方工具

背景 在之前的業務場景中&#xff0c;我們發現Kafka的實際消費能力遠低于預期。盡管我們使用了kafka-go組件并進行了相關測試&#xff0c;測試情況見《kafka-go:性能測試》這篇文章。但并未能準確找出消費能力低下的原因。 我們曾懷疑這可能是由我的電腦網絡帶寬問題或Kafka部…

【大學生職業規劃大賽備賽PPT資料PDF | 免費共享】

自取鏈接&#xff1a; 鏈接&#xff1a;https://pan.quark.cn/s/4fa45515325e &#x1f4e2; 同學&#xff0c;你是不是正在為職業規劃大賽發愁&#xff1f; 想展示獨特思路卻不知如何下手&#xff1f; 想用專業模板卻找不到資源&#xff1f; 別擔心&#xff01;我整理了全網…

ubuntu20動態修改ip,springboot中yaml的內容的讀取,修改,寫入

文章目錄 前言引入包yaml原始內容操作目標具體代碼執行查看結果總結: 前言 之前有個需求&#xff0c;動態修改ubuntu20的ip&#xff0c;看了下&#xff1a; 本質上是修改01-netcfg.yaml文件&#xff0c;然后執行netplan apply就可以了。 所以&#xff0c;需求就變成了 如何對ya…

【算法】雙指針(下)

目錄 查找總價格為目標值的兩個商品 暴力解題 雙指針解題 三數之和 雙指針解題(左右指針) 四數之和 雙指針解題 雙指針關鍵點 注意事項 查找總價格為目標值的兩個商品 題目鏈接&#xff1a;LCR 179. 查找總價格為目標值的兩個商品 - 力扣&#xff08;LeetCode&#x…

Windows 圖形顯示驅動開發-IoMmu 模型

輸入輸出內存管理單元 (IOMMU) 是一個硬件組件&#xff0c;它將支持具有 DMA 功能的 I/O 總線連接到系統內存。 它將設備可見的虛擬地址映射到物理地址&#xff0c;使其在虛擬化中很有用。 在 WDDM 2.0 IoMmu 模型中&#xff0c;每個進程都有一個虛擬地址空間&#xff0c;即&a…

軟件測評報告包括哪些內容?第三方軟件測評機構推薦

在當今信息技術飛速發展的時代&#xff0c;軟件的品質與性能直接影響到企業的運營效率和市場競爭力。為了確保軟件的可用性和可靠性&#xff0c;軟件測評成為一個不可或缺的環節&#xff0c;軟件測評報告也是對軟件產品進行全面評估后形成的一份文檔&#xff0c;旨在系統地紀錄…

深淺拷貝區別,怎么區別使用

在 JavaScript 中&#xff0c;深拷貝&#xff08;Deep Copy&#xff09; 和 淺拷貝&#xff08;Shallow Copy&#xff09; 是兩種不同的對象復制方式&#xff0c;它們的區別主要體現在對嵌套對象的處理上。以下是它們的詳細對比及使用場景&#xff1a; 1. 淺拷貝&#xff08;Sh…

tailscale + derp中繼 + 阿里云服務器 (無域名版)

使用tailscale默認的中轉節點延遲很高&#xff0c;因為服務器都在國外。 感謝大佬提供的方案&#xff1a;Tailscale 搭建derp中繼節點&#xff0c;不需要域名&#xff0c;不需要備案&#xff0c;不需要申請證書&#xff08;最新&#xff09; - yafeng - 博客園 基于這個方案&…

【異常錯誤】pycharm debug view變量的時候顯示不全,中間會以...顯示

異常問題&#xff1a; 這個是在新版的pycharm中出現的&#xff0c;出現的問題&#xff0c;點擊view后不全部顯示&#xff0c;而是以...折疊顯示 在setting中這么設置一下就好了&#xff1a; 解決辦法&#xff1a; https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…

【DeepSeek系列】04 DeepSeek-R1:帶有冷啟動的強化學習

文章目錄 1、簡介2、主要改進點3、兩個重要觀點4、四階段后訓練詳細步驟4.1 冷啟動4.2 推理導向的強化學習4.3 拒絕采樣和有監督微調4.4 針對所有場景的強化學習 5、蒸餾與強化學習對比6、評估6.1 DeepSeek-R1 評估6.2 蒸餾模型評估 7、結論8、局限性與未來方向 1、簡介 DeepS…

車載音頻配置(二)

目錄 OEM 自定義的車載音頻上下文 動態音頻區配置 向前兼容性 Android 14 車載音頻配置 在 Android 14 中,AAOS 引入了 OEM 插件服務,使你可以更主動地管理由車載音頻服務監督的音頻行為。 隨著新的插件服務的引入,車載音頻配置文件中添加了以下更改: ? OEM 自定義的車…

禁止WPS強制打開PDF文件

原文網址&#xff1a;禁止WPS強制打開PDF文件_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹如何避免WPS強制打開PDF文件。 方法 1.刪除注冊表里.pdf的WPS綁定 WinR&#xff0c;輸入&#xff1a;regedit&#xff0c;回車。找到&#xff1a;HKEY_CLASSES_ROOT\.pdf刪除KWPS.PDF…

深入解析NoSQL數據庫:從文檔存儲到圖數據庫的全場景實踐

title: 深入解析NoSQL數據庫:從文檔存儲到圖數據庫的全場景實踐 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通過電商、社交網絡、物聯網等12個行業場景,結合MongoDB聚合管道、Redis Stream實時處理、Cassandra SSTable存儲引擎、Neo4j路徑遍歷算法等42…

用 Biome 替代 ESLint 和 Prettier

簡介 ESLint 和 Prettier ESLint&#xff1a;代碼質量檢查工具&#xff0c;確保代碼風格一致與無錯誤 Prettier&#xff1a;代碼格式化工具&#xff0c;自動美化代碼布局 所以&#xff1a;ESLint Prettier 能自動美化代碼、自動檢查代碼錯誤的工具 Biome Biome&#xff1a;…

6.3 DBMS的功能和特征

文章目錄 DBMS的6大功能DBMS的3個特征DBMS的分類 DBMS的6大功能 DBMS包含數據定義&#xff0c;數據庫操作&#xff08;檢索、插入、修改、刪除&#xff09;&#xff0c;數據庫運行管理&#xff08;保證多用戶環境下正常運行&#xff09;&#xff0c;數據組織、存儲、管理&…

力扣hot100——找到字符串中的所有字母異位詞

給定兩個字符串 s 和 p&#xff0c;找到 s 中所有 p 的 異位詞 的子串&#xff0c;返回這些子串的起始索引。不考慮答案輸出的順序。 解法思路&#xff1a; 1. // 判斷字符相等&#xff0c;其實就是給定一個定長的窗口去滑動查找子串&#xff0c;為了便于判斷將p 與窗口中的子…

前端插件使用xlsx-populate,花樣配置excel內容,根據坐添加標替換excel內容,修改顏色,合并單元格...。

需求要求&#xff1a;業務人員有個非常復雜得excel表格&#xff0c;各種表頭等&#xff0c;但是模板是固定得。當然也可以實現在excel上搞出各種表格&#xff0c;但是不如直接用已有模板替換其中要動態得內容方便&#xff0c;這里我們用到CSDN得 xlsx-populate 插件。 實列中我…

未來AI方向落地場景:小語言模型,super_private_agent

未來AI方向落地場景:小語言模型,super_private_agent 目錄 未來AI方向落地場景:小語言模型,super_private_agent小語言模型super - private - agent(注重隱私的智能代理)碳基生命和硅基生命交互界面面向agent的專用交互協議和數據接口從web平臺經濟到網絡平臺舉例說明社交…