C語言 陣列與指標有哪些區別?

2021-10-07 02:29:30 字數 1619 閱讀 6410

陣列與指標是不等價的,如:

陣列名的指向不可以改變,而指向陣列的指標是可以改變的。

請看如下**:

#include int main(void)

, *p = a;

char i;

// 陣列遍歷方式一

for ( i = 0; i < 5; i++ )

// 陣列遍歷方式二

for ( i = 0; i < 5; i++ )

return 0;

}

陣列遍歷方式二:使用陣列名自增遍歷陣列元素,編譯出錯,錯誤如下:

error: value required as increment operand
因為陣列名的指向是不可以改變的,使用自增運算子自增就會改變其指向,這是不對的,陣列名只能指向陣列的開頭。但是可以改為如下遍歷方式:

for ( i = 0; i < 5; i++ )

這可以正確遍歷陣列元素。因為*(a+i)與a[i]是等價的。

字串指標指向的字串中的字元是不能改變的,而字元陣列中的字元是可以改變的。

請看如下**:

//字串定義方式一

//字串定義方式二

字串定義方式一:字串中的字元是可以改變的。如可以使用類似str[3]='q'這樣的語句來改變其中的字元。原因就是:這種方式定義的字串儲存在全域性資料區或棧區,是可讀寫的。

字串定義方式二:字串中的字元是不可以改變的。原因就是:這種方式定義的字串儲存在常量區,是不可修改的。

求陣列長度時,借用陣列名可求得陣列長度,而借用指標卻得不到陣列長度。

請看如下**:

#include int main(void)

, *p = a;

char len = 0;

// 求陣列長度方式一

printf("方式一:len=%d\n",sizeof(a)/sizeof(int));

// 求陣列長度方式二

printf("方式二:len=%d\n",sizeof(p)/sizeof(int));

return 0;

}

執行結果

方式一:len=5

方式二:len=1

求陣列長度方式一:借用陣列名來求陣列長度,可求得陣列有5個元素,正確。

求陣列長度方式二:借用指標求陣列長度,求得長度為1,錯誤。原因是:

p只是乙個指向int型別的指標,編譯器不知道其指向的是乙個整數還是指向乙個陣列。sizeof(p)求得的是p這個指標變數本身所占用的位元組數,而不是整個陣列占用的位元組數。

以上就是指標與其指向的陣列的三個典型的區別:(1)遍歷陣列時需要注意;(2)修改字串中的字元時需要注意;(3)求陣列長度時需要注意。

《c語言**優化的一些技巧(四)

經典問題:return不可返回指向棧記憶體的指標!

【rt-thread筆記】核心物件模型

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專家程式設計 這本書,看完,這本書確實是一本非常好的書,講述了很多c語言技巧。總之相當精彩。這裡,我把陣列與指標不能互換的地方總結一下。首先我們要明白什麼是宣告,什麼是定義。c語言中有且只有乙個定義,但是它可以有多個宣告 用extern 因為定義相當於分配了記憶體,而宣告只是說明變數並不...

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

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...