C語言詳解:數組指針

數組指針是指針

int* p[10]? 這是指針數組的寫法 ,因為【】的優先級比*高,

所以為了解決優先級問題,加()

int(* p)[10]=&arr;//數組的地址要存起來

說明p是指針(首先與*結合),指向的類型是int[10],指向的是數組

int  main()
{int* p = NULL;//p是整形指針-指向整形的指針-可以存放整形的地址char* pc = NULL;//pc是字符指針-指向字符的指針-可以存放字符的地址//數組指針-指向數組的指針-可以存放數組的地址int arr[10] = { 0 };//arr -首元素地址//&arr[0]-首元素地址//&arr-數組的地址  剛好可以用數組指針存放int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int(* p)[10]=&arr;//數組的地址要存起來return 0;
}

下面的代碼如何理解呢??

int main()
{char* arr[5];char(*pa)[5] = &arr;//錯了char* (*pa)[5] = &arr;//正確
}

解釋一下,arr是指針數組,五個元素是指針,&arr之后,拿到的是數組的地址,所以要用指針數組,但是數組的類型是什么呢?是char*,為啥呢,比如int arr【5】,arr 5個元素是int 型,而我arr的元素是char*的類型。

指針數組改怎么用呢?

在一維數組的用法,代碼如下,可以看到用起來很復雜啊,解釋一下,*pa=arr;就是首元素地址,首元素地址加i就拿到各個地址,然后解引用,也可以按數組的表示來

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int(*pa)[10] = &arr;int i = 0;for (i = 0; i < 10; i++){/*printf("%d ", (*pa)[i]);*///printf("\n");printf("%d ", *(*pa + i));}return 0;
}

對比一下:直接用指針寫的話,可以看出代碼簡單很多,所以二維數組的使用一般用于二維數組以上才OK

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int i = 0;for(i=0;i<10;i++){printf("%d ", *(p + i));}return 0;
}

我們之前學過為二維數組的打印,下面代碼就是最基本的方法,下面我們要用二維數組進行打印?

void print1(int arr[3][5], int x, int y)
{int i = 0;int j = 0;for (i = 0; i < x; i++){for (j = 0; j < y; j++){printf("%d ", arr[i][j]);}printf("\n");}
}
int main()
{int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };print1(arr, 3, 5);return 0;
}

arr是數組名,即首元素地址,我們知道,二維數組可以看成一維數組,所以二維數組的首元素地址不是第一行第一列的元素的地址,而是第一行元素的地址。也就是一個一維數組的地址,,對于一個數組的地址,我們可以用指針數組來指向。

void print2(int(*p)[5], int x, int y)
{int i = 0;for (i = 0; i < x; i++){int j = 0;for (j = 0; j < y; j++){printf("%d ", *(*(p + i) + j));}printf("\n");}
}
int main()
{int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };print2(arr, 3, 5);return 0;
}

*(p+i)就可以拿到每一行的地址,每一行的地址再加j,就可以得到每一個元素的地址。再解引用。當然也可以用數組的表示方法來

printf("%d ", (*(p + i))[j]);

可以參考一下一維數組的方式來理解。其實表示方式還是有很多種的,

arr[i]==*(arr+i)==*(p+i)==p[i]

自己可以在琢磨一下,?

printf("%d ", p[i][j]);
printf("%d ", *(p[i]+j);

最后,解釋一下?int(*parr3[10])[5] 代表什么意思。

parr3首先與【】結合,說明是數組,數組的類型是int(*)【5】,就是我們本節學的指針數組,

說明該數組有10個元素,每個元素是一個數組指針,該數組指針指向的數組右5個元素,每個元素的類型是int 型。

畫圖解釋一下:

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

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

相關文章

哈希表法快速求解最長連續序列 | 力扣128題詳細解析

?????? 歡迎來到我的博客。希望您能在這里找到既有價值又有趣的內容&#xff0c;和我一起探索、學習和成長。歡迎評論區暢所欲言、享受知識的樂趣&#xff01; 推薦&#xff1a;數據分析螺絲釘的首頁 格物致知 終身學習 期待您的關注 導航&#xff1a; LeetCode解鎖100…

Oracle 數據庫 19c 選件和管理包 英文技術文檔

都是英文的&#xff0c;點擊鏈接可單獨下載。點這里批量下載。 Database Options&#xff1a; 數據庫選件或管理包數據表技術白皮書MultitenantData Sheet(12c)White PaperReal Application ClustersData Sheet(12c)White PaperActive Data GuardData Sheet(沒找到)White Pap…

關于電源3(整流濾波電路)

整流濾波電路 框圖 一共有四種整流電路 以下是自己參考別人的文章https://blog.csdn.net/zhuguanlin121/article/details/130653498?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171582622316800215096518%2522%252C%2522scm%2522%253A%252220140713.130102334…

jenkins配置不同版本nodeJS,保姆級叫你配置

問題描述&#xff1a;公司jenkins被改了nodejs版本適配其他項目導致以前的項目構建失敗&#xff0c;原因就是nodejs版本太高或太低導致&#xff0c;這里教大家不去更改服務器默認版本&#xff0c;當需要特殊版本直接在jenkins里配置即可。 過程 1、安裝nodeJS插件 1.1點擊管…

Linux中的nproc命令

2024年5月15日&#xff0c;周三上午 nproc 是一個在類 Unix 系統中使用的命令行實用程序&#xff0c;用于返回系統上可用的處理器核心數量。這個數字通常比物理 CPU 核心的數量要少&#xff0c;因為它可能排除了超線程核心或熱插拔核心。nproc 命令讀取 /proc/cpuinfo 文件來獲…

怎么把照片變小做頭像?多種方法教你圖片改尺寸

現在在社交媒體平臺或者是社交軟件上&#xff0c;我們經常會去更改頭像來展示自己&#xff0c;但是有時候我們拍攝的照片太大無法直接用作頭像&#xff0c;這時候就需要去修改圖片尺寸&#xff0c;將圖片改大小到合適的數值才能使用&#xff0c;那么如何快速的將圖片改大小呢&a…

Ansys Mechanical|中遠程點的Behavior該如何設置?

Remote point是ANSYS mechanical中的一種常見節點自由度耦合建模形式&#xff0c;在轉動裝配體中的連接轉動副、或者在施加遠端約束及遠端載荷的時候&#xff0c;我們經常用到遠端單元來耦合一個面或者一條線。例如銷軸似的滾動摩擦連接&#xff0c;如果我們希望將兩個物體通過…

TCP實現文件傳輸以及下載

目錄 1.上傳文件思路 2.下載文件思路 3.上傳文件代碼 4.下載文件代碼 5.運行格式 1.上傳文件思路 上傳文件就相當于客戶端發送文件 步驟&#xff1a; 創建套接字連接服務器獲取文件大小循環少量多次發送關閉文件和套接字 2.下載文件思路 下載文件就相當于服務器端接收…

layui+java前端傳json后端接收

項目場景&#xff1a; layui前端使用復選框選擇Table的數據傳到java后端進行業務操作 問題描述 報錯類型錯誤JSON轉換接收失敗的類型錯誤 解決方案&#xff1a; 分為前后端兩種情況 先說前端的: 前端需要是集合轉json下面是代碼案例 主界面的table選擇之后通過緩存傳到子界…

JavaScript 實現敏感信息脫敏

JavaScript 實現敏感信息脫敏 銀行卡號脫敏 要在 JavaScript 中對銀行卡信息進行脫敏&#xff0c;可以使用字符串處理方法來替換敏感信息為特定的字符。以下是一個簡單的示例代碼&#xff0c;將銀行卡號的中間數字用 “*” 替換&#xff1a; function desensitizeCardNumber…

小白git

克隆 &#xff1a;git clone 鏈接地址 如果沒有.git文件的話&#xff1a;git init 切換分支&#xff1a;cd 目錄 拉代碼&#xff1a;git pull 查看你自己改了那些文件&#xff1a;git status 添加道本地暫存區&#xff1a;git add * 提交到遠端&#xff1a;git commit …

吳恩達深度學習筆記:優化算法 (Optimization algorithms)2.9-2.10

目錄 第二門課: 改善深層神經網絡&#xff1a;超參數調試、正 則 化 以 及 優 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;優化算法 (Optimization algorithms)2.9 學習率衰減(Learning rate decay) 第二門…

HP5V80、HP5V105、HP3V28電比例驅動柱塞泵放大器

HP5V80、HP5V105、HP3V28、HP3V45、HP3V60、HP3V80、HP3V125、HP3V140帶電比例控制泵放大器&#xff0c;變排量泵的排量可通過由BEUEC比例放大器輸出到比例電磁閥電流變化而進行調整&#xff0c;控制電流范圍為300mA至800mA(24VDC)或600mA至1600mA(12VDC)。主要適合應用于工程機…

【聯通官網及APP注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞 …

「AI模型瘦身術」——知識蒸餾技術綜述

使用KD原因 遇到問題&#xff1a;從產業發展的角度來看工業化將逐漸過渡到智能化&#xff0c;邊緣計算逐漸興起預示著 AI 將逐漸與小型化智能化的設備深度融合&#xff0c;這也要求模型更加的便捷、高效、輕量以適應這些設備的部署。 解決方案&#xff1a;知識蒸餾技術 知識…

Logic Pro X for Mac v11.0.0激活版:專業音頻制作軟件

對于音樂創作者來說&#xff0c;一個穩定、高效的工作流程至關重要。Logic Pro X for Mac提供了一系列工作流程優化功能&#xff0c;讓你能夠更快捷、高效地完成音樂創作。從添加音軌、錄制音頻&#xff0c;到混音和編曲&#xff0c;每一個步驟都如絲般順滑。同時&#xff0c;L…

Maven 依賴排查

先從項目去看顯而易見&#xff0c;假如我們有一個項目&#xff0c;父工程中包含一些子工程&#xff0c;如下&#xff1a; 我們想看一下samples-account中的依賴關系&#xff0c;那么我們可以打開 samples-account的pom文件&#xff0c;查看其maven依賴關系圖。 我們可以看到此項…

Java測試框架:分享常用的Java測試框架,如JUnit, TestNG等,包括單元測試,集成測試,性能測試等

單元測試框架 JUnit JUnit簡介 JUnit是一個開源的Java測試框架,用于編寫和執行可重復的測試。它是Java開發人員的一個重要工具,用于進行單元測試、回歸測試和模塊化測試。JUnit提供了一種形式化的方式來編寫測試用例,并通過這些測試用例核實代碼的正確性。具有可預測的測試…

ARM 交叉編譯搭建SSH

一、源碼下載 zlib&#xff1a;zlib-1.3.1.tar.xz openssl&#xff1a;openssl-0.9.8d.tar.gz openssh&#xff1a;openssh-4.6p1.tar.gz 二、交叉編譯 1、zlib 編譯參考這里 2、openssl tar -xf openssl-0.9.8d.tar.gz ./Configure --prefix/opt/ssh/openssl os/compile…

android設計模式-builder模式

builder模式可以看成是鏈式調用&#xff0c;如&#xff0c;是builder不是那個bunder new AlertDialog.Builder(this) .setTitle("對話框") .setMessage("測試") .setIcon(R.mipmap.ic_launcher) …