真正理解一維陣列的陣列名的真正含義

2021-06-05 14:45:28 字數 1087 閱讀 7689

這一段**的執行結果如下:

我們再來看看&a 和 &a + 1吧:

&a = 0xbfea014c &a + 1 = 0xbfea0160,相差多少?聰明的你一定知道,是20。這時我們知道,&a + 1已經到陣列的最後乙個元素的下乙個位址。

到這裡我們來總結一下,然後在看凌雲若葉的面試題:

int a[5],a是陣列名,它其實就是乙個符號,代表陣列的首位址和&a[0]乙個意思。

&a的值也是陣列的首位址,但是意義完全不一樣。我們可以這樣理解&a呢,是取整個陣列的位址,那&a+1呢就是一次移動乙個陣列。

好,再來看凌雲若葉的面試題

執行結果:

想一想為什麼?

通過我剛剛的一番忽悠,我想你應該差不多了。如果你做錯了,也許你還差點什麼東西,不用著急,我們接著看:

#include

int main()

;//陣列的定義並賦值,不知道這個,建議回家

int *ptr1=(int *)(&a+1);//這時這個,ptr1儲存的是最後乙個元素 的下乙個位址

int *ptr2=(int *)((int )a+1);//(int)a,是不是把陣列的位址強轉成整 型,這樣+1,只是在個這個位址值加了乙個1。還記得a+1嗎,由於a是陣列的名首位址,a+1的值是多少?***。

printf("%x,%x",ptr1[-1],*ptr2);//ptr1[-1],下表是-1?哇塞,不可能吧?笨笨都是這樣想,但我們是開發人員,我們知道ptr1[-1],其實可以看成*(ptr1 - 1)。還記得ptr1儲存的值嗎?知道ptr1[-1]的值吧.

typedef的真正理解

首先請看看下面這兩句 typedef int a 10 typedef void p void 如果你能一眼就看出它們的意思,那請不要再往下看了。如果你不太理解,或概念還有些模糊,請繼續往下看吧。下面的東西我就直接把人家的東西粘上去吧。自己敲太慢了。呵呵。原文 摘錄 typedef用來宣告乙個別名,...

控制代碼的真正理解

真理一句話 控制代碼是引用,而不是指標。只能改變對應物件的內容,但不知道物件在哪。以下內容摘取網上資源,如有違反作者版權,請通知。控制代碼是用來標識專案的。它就象我們的姓名一樣,每個人都會有乙個,不同的人的姓名不一樣,但是,也可能有乙個名字和你一樣的人。有一說法是指向指標的指標 專案包括 模組 mo...

對typedef的真正理解

本人學c 也有三年了,還是對typedef不太熟,今天終於弄清楚了,所以發表此帖,希望對不太清楚的朋友能有所幫助。首先請看看下面這兩句 typedef int a 10 typedef void p void 如果你能一眼就看出它們的意思,那請不要再往下看了。如果你不太理解,或概念還有些模糊,請繼續...