陣列名與指標典型面試題的分析(1)

2021-05-24 06:35:53 字數 1146 閱讀 1312

華清遠見嵌入式學院

講師。這類題目,總的來說,實際上可以歸納為如下幾點:

1、 有乙個一維陣列int a1[10],定義乙個指標,指向一維陣列名。

2、 有乙個一維陣列int a2[10],定義乙個指標,指向一維陣列名的位址。

3、 有乙個二維陣列int a3[3][4],定義乙個指標,指向二維陣列名。

4、 有乙個二維陣列int a4[3][4],定義乙個指標,指向二維陣列名的位址。

對於這類題目,剛看到,似乎感覺比較沒有思路,其實我們細心思考下,這四個問題,都是讓我們定義乙個指標,指向一片連續的記憶體空間,只是說這片記憶體空間有的是一維,有的是二維而已。

我們這次先分析下前面兩道題:

那我們先看第乙個題目,因為a1本身就是連續空間的首位址,那麼我們就只需要定義乙個位址變數p,讓p = a就可以了,既然要用「=」,那麼等號兩邊就需要的型別一樣,所以毫無疑問,p應該為 《資料型別》 *p了。現在不確定的就是資料型別了。根據指標的定義,應該有p[0]到p[1]的偏移和a[0]到a[1]的偏移一致,我們很容易看出,a[0]和a[1]的偏移是int型別。那麼對於第乙個題目的資料型別就應該為int了,第一題的答案為int *p;

接著看第二問題,這個問題的難點在,什麼叫陣列名的位址,我們都知道c語言中的變數都有位址,但陣列名是什麼,他是不是也在記憶體中實實在在的存在哪,回答是否定的(感興趣的同學,可以試著證明下,a的值和&a的值有什麼特點)。a是陣列空間的乙個標號,那對標號取位址,是什麼那,我們可以試著把&a和&a+1的位址都列印出來,然後看下他們的關係,我們會發現,&a和&a+1之間的偏移實際上是10個int的單位。那麼我們也可以推出陣列名的位址原來標示了整個陣列的空間。也就是說&a[0]和&a[1]的偏移實際上是乙個int [10]的空間。那麼對於《資料型別》 *p來說,資料型別就是指int [10]這個空間了。第二題的答案為int (*p)[10];

對於前2個問題,可以寫出如下實驗**:

int main(int argc,char *argv)

以上程式中p1,p即我們應該填的,如果編譯器編譯時沒有警告,那麼說明我們的這樣寫法是正確的。

那麼在深入下的分析下,p1和p現在都要他訪問a1中的第二個元素,即a1[1],應該怎麼做那?

p[1] p1[0][1],如何驗證那,只要執行if(p[1] = = p1[0][1]),如果這個邏輯為真,那說明正確。

陣列名與指標的關係

陣列名與指標間的聯絡 陣列名與指標間的區別分析總結 在剛剛接觸到陣列與指標時,我想最常苦惱的問題就是陣列名與指標之間有什麼關係了吧。但是他們兩者之間真的有什麼數不清道不明的關係嗎?答案無疑是否定的,接下來就讓我們來一 竟吧!首先我們需要了解一下陣列與指標的定義 陣列名與指標間的聯絡 從定義中分析,不...

指標與陣列名的關係

1.對於一維陣列 a 10 一級指標p p a 把陣列名 常量位址 賦值給了指標p 正確 因為p是int指標,而陣列名相當於int 常量,所以正確。p a 編譯時就會出現錯誤,會顯示警告 從不相容的指標型別賦值。那是因為 a是取陣列a的位址,相當於int 10 型別的陣列指標,而指標p只是普通的一級...

函式 指標 陣列 1 (面試題)

嘗試用變數a寫出下面的定義 1 乙個整型數 int a 2 乙個指向整型數的指標 int a 3 乙個指向指標的指標,它指向的指標是指向乙個整型數 int a 4 乙個有10個整型數的陣列 int a 10 5 乙個有10個指標的陣列,該指標是指向乙個整型數的 int a 10 6 乙個指標有10個...