如何用指針數(shù)組和數(shù)組指針來表示二維數(shù)組?
今天來給大家分享一道經典的筆試題。 ?
a是一個二維數(shù)組,3 行 4 列,一共 12 個元素。
p是個數(shù)組,數(shù)組里面元素個數(shù)不詳,每個元素都是整型指針。
那么它應該如何初始化?
首先,既然是數(shù)組,初始化一定需要一個大括號,然后里面填上多個整型指針。
int*p[]={};那在二維數(shù)組中,能不能找到int *類型的數(shù)據(jù)?
肯定是有的。
在二維數(shù)組中,無非有這么幾種寫法:
a; a[0]; a[0][0]; &a; &a[0]; &a[0][0];數(shù)組名肯定不對,它是一個二級地址;
&a更不對,它是三級地址;
a[0][0]是個具體的元素,跟地址沒有關系。

剩下的就是a[0]和&a[0][0]。
其實這兩個的含義一樣,都表示第一行第一個元素的地址,既然是元素的地址,那肯定就是int *類型。
于是p的初始化就可以寫成:
int*p[] = {a[0], a[1], a[2]};分別是第一行、第二行、第三行首元素的地址。
而p后面的中括號也可以寫上3,表示數(shù)組有3個元素。
int *p[3] = {a[0], a[1], a[2]};內存模型畫出來就是這樣的,數(shù)組p包含三個指針,每個指針都指針二維數(shù)組每行的第一個元素。

再來看q。

q是個指針,指向數(shù)組,而且是個一維數(shù)組,因為只有一個中括號,但是數(shù)組有幾個元素不詳,每個元素都是整數(shù)。
那數(shù)組a中有沒有一維數(shù)組數(shù)組呢?
當然有的,我們剛接觸二維數(shù)組的時候,老師就跟我們說過,二維數(shù)組就是由多個一維數(shù)組組成,第一行是個一維數(shù)組,第二行也是一個一維數(shù)組。

那我們只要把第一行的地址賦值給q就行。
于是可以把q初始化成:
int(*q)[] = a;a表示數(shù)組第一行的地址,所以q后面的中括號也能順理成章的寫成4,因為一維數(shù)組有4個元素。
int (*q)[4] = a;q的含義和a是一樣的,表示數(shù)組第一行的地址,q加一,就指向數(shù)組的下一行。

這個就是C語言里面的指針數(shù)組和數(shù)組指針,怎么樣,迷糊了沒?
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7632瀏覽量
141783
原文標題:分別用指針數(shù)組和數(shù)組指針表示二維數(shù)組
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
熱點推薦
C語言指針和數(shù)組的錯誤用法
工作好幾年了,一直用的都是C。自認為指針應該很熟悉了。然而,前段時間我對二維指針和二維數(shù)組的一個混用,并且我們項目組的一個大牛(博士畢業(yè),工
發(fā)表于 09-28 09:12
?975次閱讀
C語言中指針數(shù)組和數(shù)組指針的區(qū)別
指針和數(shù)組之間存在著緊密的關系。在本文中,我們將探討指針和數(shù)組的關系、指針算術和數(shù)組遍歷、多維
發(fā)表于 08-17 15:29
?635次閱讀
問一個二維數(shù)組和指針的問題?
比如定義一個二維數(shù)組int a[3][5], 我們知道a是這個二維數(shù)組的首地址,a[0]是第一行元素的首地址,假設這個二維
發(fā)表于 05-09 11:28
C語言程序設計教程之二維數(shù)組如何應用二維數(shù)組的資料概述
本文檔的主要內容詳細介紹的是C語言程序設計教程之二維數(shù)組如何應用二維數(shù)組的資料概述主要內容包括了:1 了解二維
發(fā)表于 10-26 16:48
?3次下載
C語言指針和數(shù)組的區(qū)別
在C語言教程中我們使用通過數(shù)組名通過偏移和指針偏移都可以遍歷數(shù)組,那么指針和數(shù)組到底有什么區(qū)別??
數(shù)組與指針不能混用的情況
數(shù)組與指針不能混用的情況? 數(shù)組與指針是 C/C++ 中非常常見的特性和概念。然而,在某些情況下,數(shù)組與
指針數(shù)組和二維數(shù)組有沒有區(qū)別
指針數(shù)組和二維數(shù)組有沒有區(qū)別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][
評論