【C語言】指針詳解(接)

前言:
文接上章,在上章節講解了部分指針知識點,在本章節為大家繼續提供。

六·指針與字符串:C 語言字符串的本質

在 C 語言中,字符串實際上是一個以\0結尾的字符數組。字符串常量本質上是指向字符數組首元素的指針:

char *str = "Hello, World!"; // 字符串常量存儲在只讀內存區
printf("%s\n", str);         // 輸出Hello, World!
printf("首字符:%c\n", *str); // 輸出H
printf("第3個字符:%c\n", *(str + 2)); // 輸出l

動態分配字符串:?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() 
{char *str = (char *)malloc(20 * sizeof(char)); // 動態分配20字節內存if (str == NULL) 
{printf("內存分配失敗\n");return 1;}strcpy(str, "Dynamic String"); // 復制字符串到分配的內存printf("%s\n", str); // 輸出Dynamic Stringfree(str); // 釋放內存,防止內存泄漏return 0;
}

malloc函數在內存函數中講解過,想要詳細了解的可以點開主頁,看一下文章。?

七·多級指針:指針的指針

指針變量本身也有自己的內存地址,因此可以定義指向指針的指針(多級指針):

int num = 10;
int *p = &num;     // 一級指針,指向int
int **pp = &p;     // 二級指針,指向int*
int ***ppp = &pp;  // 三級指針,指向int**printf("num的值:%d\n", ***ppp); // 解引用三次,輸出10

多級指針常用于需要修改一級指針本身的場景,比如動態分配二維數組:

int **matrix;
int rows = 3, cols = 4;// 分配行指針數組
matrix = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) 
{// 為每一行分配列元素matrix[i] = (int *)malloc(cols * sizeof(int));
}// 使用二維數組
matrix[0][0] = 100;// 釋放內存
for (int i = 0; i < rows; i++) 
{free(matrix[i]);
}
free(matrix);

八·常見指針錯誤

野指針:未初始化的指針

int *p;
*p = 10; // 錯誤!p指向隨機地址

空指針解引用

int *p = NULL;
*p = 10; // 錯誤!解引用空指針

內存泄漏:動態分配的內存未釋放

int *p = (int *)malloc(sizeof(int));
// 使用p
// 忘記free(p)

?九·總結

?

  1. 指針變量存儲的是內存地址
  2. 通過解引用操作符*可以訪問和修改內存中的數據
  3. 指針算術允許在內存中移動
  4. 指針是實現數組、字符串、動態內存分配和復雜數據結構的基礎
  5. 使用指針時必須特別注意內存管理和避免常見錯誤

?

?

?

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

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

相關文章

第5講、Odoo 18 CLI 模塊源碼全解讀

Odoo 作為一款強大的企業級開源 ERP 系統&#xff0c;其命令行工具&#xff08;CLI&#xff09;為開發者和運維人員提供了極大的便利。Odoo 18 的 odoo/cli 目錄&#xff0c;正是這些命令行工具的核心實現地。本文將結合源碼&#xff0c;詳細解讀每個 CLI 文件的功能與實現機制…

如何將 PDF 文件中的文本提取為 YAML(教程)

這篇博客文章將向你展示如何將 PDF 轉換為 YAML&#xff0c;通過提取帶有結構標簽的標記內容來實現。 什么是結構化 PDF&#xff1f; 一些 PDF 文件包含結構化內容&#xff0c;也稱為帶標簽&#xff08;tagged&#xff09;或標記內容&#xff08;marked content&#xff09;&…

銀發團扎堆本地游,“微度假”模式如何盤活銀發旅游市場?

? 銀發微度假&#xff0c;席卷江浙滬 作者 | AgeClub呂嬈煒 前言 均價200-300元的兩天一夜微度假產品&#xff0c;正在中老年客群中走紅。 “我們屬于酒店直營&#xff0c;沒有中間商賺差價&#xff0c;老年人乘坐地鐵到目的地站&#xff0c;會有大巴負責接送&#xff0c;半…

蘋果iOS應用ipa文件進行簽名后無法連接網絡,我們該怎么解決

蘋果iOS應用ipa文件在經過簽名處理后&#xff0c;如果發現無法連接網絡&#xff0c;這可能會給用戶帶來極大的不便。為了解決這一問題&#xff0c;可以采取一系列的排查和解決步驟&#xff0c;以確保應用能夠順利地訪問互聯網。 首先&#xff0c;確保你的設備已經連接到一個穩…

MySQL 中 ROW_NUMBER() 函數詳解

MySQL 中 ROW_NUMBER() 函數詳解 ROW_NUMBER() 是 SQL 窗口函數中的一種&#xff0c;用于為查詢結果集中的每一行分配一個??唯一的連續序號??。與 RANK() 和 DENSE_RANK() 不同&#xff0c;ROW_NUMBER() 不會處理重復值&#xff0c;即使排序字段值相同&#xff0c;也會嚴格…

Leetcode百題斬-二叉樹

二叉樹作為經典面試系列&#xff0c;那么當然要來看看。總計14道題&#xff0c;包含大量的簡單題&#xff0c;說明這確實是個比較基礎的專題。快速過快速過。 先構造一個二叉樹數據結構。 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode…

Asp.Net Core 如何配置在Swagger中帶JWT報文頭

文章目錄 前言一、配置方法二、使用1、運行應用程序并導航到 /swagger2、點擊右上角的 Authorize 按鈕。3、輸入 JWT 令牌&#xff0c;格式為 Bearer your_jwt_token。4、后續請求將自動攜帶 Authorization 頭。 三、注意事項總結 前言 配置Swagger支持JWT 一、配置方法 在 …

MySQL 定時邏輯備份

文章目錄 配置密碼編寫備份腳本配置權限定時任務配置檢查效果如果不想保留明文密碼手工配置備份密碼修改備份命令 配置密碼 cat >> /root/.my.cnf <<"EOF" [client] userroot passwordYourPassword EOF編寫備份腳本 cat > /usr/local/bin/mysql_dum…

在qt中使用c++實現與Twincat3 PLC變量通信

這是一個只針對新手的教程&#xff0c;下載安裝就不說了&#xff0c;我下的是TC31-Full-Setup.3.1.4024.66.exe是這個版本&#xff0c;其他版本應該問題不大。 先創建一個項目 選中SYSTEM&#xff0c;在右側點擊Choose Target&#xff08;接下來界面跟我不一樣沒關系&#xf…

云原生微服務devops項目管理英文表述詳解

文章目錄 1.云原生CNCF trail map云原生技術棧路線圖 2. 微服務單體應用與微服務應用架構區別GraphQLKey differences: GraphQL and REST 3.容器化&編排dockerKubernetesContainers and ContainerizationContainer Basics 4. DevOps & CI/CDTerms and Definitions 5.Ag…

pyside 使用pyinstaller導出exe(含ui文件)

第一步&#xff1a;首先確保安裝好pyinstall&#xff0c;終端運行 pyinstaller -w main.py 生成兩個文件夾 打開exe文件報錯&#xff0c;問題是ui文件找不到 第二步&#xff1a;將ui文件復制到exe所在文件夾&#xff0c;打開成功 ![在這里插入圖片描述](https://i-blog.csdni…

kerberos在無痕瀏覽器 獲取用戶信息失敗 如何判斷是否無痕瀏覽器

kerberos在無痕瀏覽器 獲取用戶信息失敗 如何判斷是否無痕瀏覽器 js 代碼 其他地方用直接導入js getCurrentUserId 這是自己后端獲取 域賬號地址 我是成功返回200 //true普通瀏覽器 fasle 無痕瀏覽器 export const checkBrowserMode async () > {try {const response a…

HTML 計算網頁的PPI

HTML 計算網頁的PPI vscode上安裝live server插件&#xff0c;可以實時看網頁預覽 有個疑問&#xff1a; 鴻蒙density是按照類別寫死的嗎&#xff0c;手機520dpi 折疊屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…

華為OD機試真題——Boss的收入(分銷網絡提成計算)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

<el-date-picker>組件傳參時,選中時間和傳參偏差8小時

遇到一個bug&#xff0c;不仔細看&#xff0c;都不一定能發現&#xff0c;bug描述&#xff1a;我們有一個搜索框&#xff0c;里面有一個時間選擇器&#xff0c;當我使用<el-date-picker>時&#xff0c;我發現當我選擇時分秒之后&#xff0c;顯示都正常&#xff0c;但是當…

uni-app開發特殊社交APP

uni-app開發特殊社交APP 目錄 1.展示APP功能 2.展示項目結構 3.關于我的GitHub 引言 博主最近自己在GitHub上面上傳了一個關于社交軟件的項目&#xff08;該項目早已開發完畢&#xff09;, 這個社交軟件比較特殊, 被稱之為blind-date&#xff0c; blind-date 是基于 uni-…

深入研究Azure 容器網絡接口 (CNI) overlay

啟用cni overlay 在通過portal創建aks的時候,在networking配置上,選中下面的選項即可啟用。 通過CLI創建AKS 要創建具有 CNI 覆蓋網絡的 AKS 群集,需要在創建群集時指定 --network-plugin azure 和 --network-plugin-mode 覆蓋選項。 還需要指定 --pod-cidr 選項來定義群…

Docker 部署項目

使用 Docker 部署項目是一個很好的選擇&#xff0c;可以避免服務器環境不兼容的問題&#xff0c;并且能夠實現一致性和可移植性。我會給你一個詳細的步驟&#xff0c;幫你從零開始理解 Docker&#xff0c;最終在服務器上部署 Roop 項目。 1. 安裝 Docker 首先&#xff0c;你需…

excel表格記賬 : 操作單元格進行加減乘除 | Excel中Evaluate函數

文章目錄 引用I 基礎求和∑II Excel中Evaluate函數基于字符串表達式進行計算用法案例 :基于Evaluate實現匯率計算利潤知識擴展在單元格內的換行選擇整列單元格引用 需求: 基于匯率計算利潤,調整金額以及進匯率和出匯率自動算出利潤,已經統計總利潤。 基于Evaluate實現匯率計…