C語言陣列與指標的區別

2021-05-21 16:39:26 字數 791 閱讀 5084

最近,把《c專家程式設計》這本書,看完,這本書確實是一本非常好的書,講述了很多c語言技巧。總之相當精彩。這裡,我把陣列與指標不能互換的地方總結一下。

首先我們要明白什麼是宣告,什麼是定義。c語言中有且只有乙個定義,但是它可以有多個宣告(用extern)。因為定義相當於分配了記憶體,而宣告只是說明變數並不是自身,而是在其它地方有它的定義。

下面,我先描述一下定義為指標,但對它的引用為陣列的情況。

char *p="abc";

char c=p[1];

1、取得編譯器符號表具有乙個p,位址為1111

2、取得位址1111的內容,即為2222

3、取得p[i]的值1,然後把它與2222相加.

4、取位址2222+1的內容。

本來p[i]表示要對記憶體進行直接引用的(1111+1),但是它執行的卻是對記憶體的間接引用,原因是我們告訴了編譯器,我們此時擁有的是乙個指標,所以會引起對記憶體的間接呼叫。

如果把p聲名為指標,那麼不管p原先定義為指標還是陣列,都會按照上面四部分執行。

那麼現在我再描述一下p原先定義為陣列,但是對它的聲名卻為指標的情況。

char p="abcde";

char c=*(p+1);

1、取得編譯器符號表具有乙個p,位址為1111

2、取得位址1111的內容,即為「abcd」(注意,這裡是存放陣列資料的記憶體空間)

3、取得*(p+1)的值1,然後與abcd相加。

4、取位址abcd+1的內容。

如果你對這個位址修改的話,可能會給程式帶來非常嚴重的後果。

--參考資料《c專家程式設計》

C語言 陣列指標與指標陣列區別

陣列指標 也稱行指標 int p n 優先及高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。int a 3 2 int p 2 p a p 該語句執行後,也就是p p 1,p跨過a 0 指向了a 1 所以...

C語言陣列指標和指標陣列的區別

對指標陣列和陣列指標的概念,相信很多c程式設計師都會混淆。下面通過兩個簡單的語句來分析一下二者之間的區別,示例 如下所示 int p1 5 int p2 5 首先,對於語句 intp1 5 因為 的優先順序要比 要高,所以 p1 先與 結合,構成乙個陣列的定義,陣列名為 p1,而 int 修飾的是陣...

C語言 指標陣列和陣列指標的區別

目錄 一 指標陣列 二 陣列指標 指標陣列 指標陣列可以說成是 指標的陣列 由指標變數組成的陣列 實際是乙個指標 長度固定 32 位系統下佔 4 個位元組 指標指向陣列 指向的陣列佔多少個位元組不確定 首先這個變數是乙個陣列 其次,指標 修飾這個陣列,意思是說這個陣列的所有元素都是指標型別 在 32...