如何用指針數組和數組指針來表示二維數組?
今天來給大家分享一道經典的筆試題。
?
a是一個二維數組,3 行 4 列,一共 12 個元素。
p是個數組,數組里面元素個數不詳,每個元素都是整型指針。
那么它應該如何初始化?
首先,既然是數組,初始化一定需要一個大括號,然后里面填上多個整型指針。
int*p[]={};那在二維數組中,能不能找到int *類型的數據?
肯定是有的。
在二維數組中,無非有這么幾種寫法:
a; a[0]; a[0][0]; &a; &a[0]; &a[0][0];數組名肯定不對,它是一個二級地址;
&a更不對,它是三級地址;
a[0][0]是個具體的元素,跟地址沒有關系。
?
剩下的就是a[0]和&a[0][0]。
其實這兩個的含義一樣,都表示第一行第一個元素的地址,既然是元素的地址,那肯定就是int *類型。
于是p的初始化就可以寫成:
int*p[] = {a[0], a[1], a[2]};分別是第一行、第二行、第三行首元素的地址。
而p后面的中括號也可以寫上3,表示數組有3個元素。
int *p[3] = {a[0], a[1], a[2]};內存模型畫出來就是這樣的,數組p包含三個指針,每個指針都指針二維數組每行的第一個元素。
再來看q。
?
q是個指針,指向數組,而且是個一維數組,因為只有一個中括號,但是數組有幾個元素不詳,每個元素都是整數。
那數組a中有沒有一維數組數組呢?
當然有的,我們剛接觸二維數組的時候,老師就跟我們說過,二維數組就是由多個一維數組組成,第一行是個一維數組,第二行也是一個一維數組。
?
那我們只要把第一行的地址賦值給q就行。
于是可以把q初始化成:
int(*q)[] = a;a表示數組第一行的地址,所以q后面的中括號也能順理成章的寫成4,因為一維數組有4個元素。
int (*q)[4] = a;q的含義和a是一樣的,表示數組第一行的地址,q加一,就指向數組的下一行。
?
這個就是C語言里面的指針數組和數組指針,怎么樣,迷糊了沒?
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7614瀏覽量
137719
原文標題:分別用指針數組和數組指針表示二維數組
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言指針和數組的錯誤用法
工作好幾年了,一直用的都是C。自認為指針應該很熟悉了。然而,前段時間我對二維指針和二維數組的一個混用,并且我們項目組的一個大牛(博士畢業,工
發表于 09-28 09:12
?770次閱讀
C語言程序設計教程之二維數組如何應用二維數組的資料概述
本文檔的主要內容詳細介紹的是C語言程序設計教程之二維數組如何應用二維數組的資料概述主要內容包括了:1 了解二維
發表于 10-26 16:48
?3次下載
指針數組和二維數組有沒有區別
指針數組和二維數組有沒有區別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][
評論