C 陣列名與指標

2021-09-18 01:54:33 字數 1970 閱讀 7637

陣列名a代表乙個固定的位址,內涵在於其指代實體是陣列這種資料結構,可以理解為指標常量,但不是指標常量!(比如sizeof(a)等於5,而sizeof(指標)等於4),另外陣列名a不能用作左值;形參陣列名b是指標變數,在函式fun中可以用作左值。

陣列名a作右值時,a代表陣列首元素的位址,而&a代表整個陣列的首位址。這兩個值是相等的,但是意義不相同,在參與運算的時候有不同的表現。

陣列名傳入函式形參後,會失去本身常量的特性,變為乙個普通的指標。

如下**用於檢視陣列名的特性以及區別:

#include

void

fun(

char b)

//形參陣列名

intmain()

;printf

("%p %p\n"

, a, a +1)

;printf

("%p %p\n"

,&a,

&a +1)

;printf

("%d %d\n"

,sizeof

(a),

sizeof

(&a));

//a++; //報錯:表示式必須是可修改的左值

第二行printf:&a+1位址同樣會偏移,不同的是由於&a表示整個陣列的首位址,所以&a+1會偏移整個陣列大小的位址;

第三行printf:陣列名的sizeof值等於陣列所占用的記憶體位元組數;32位編譯器中,指標型別的變數或常量返回值通常是4(位元組)。

第四行printf:形參陣列名失去了陣列名的常量特性,可以自增自減。

指標陣列的一般定義方式類似char *p[10];p優先和[ ]結合,表示核心是陣列,這個陣列中儲存的內容全部是指標變數。指標陣列適合用來指向若干個字串,使字串處理更加方便,如果使用二維陣列來存,可能會因為字串長度不固定帶來記憶體單元浪費。常見的比如int main(int argc, char* ar**);

指標陣列初始化賦值有以下三種方式:

如下**演示如何將指標陣列傳遞給函式形參,以及函式如何獲取指標陣列的值:

#include

void

fun(

char

**pt)

intmain()

;//定義乙個指標陣列

char *p定義方式,還可以使用char **p定義方式,效果一樣。

陣列指標的一般定義方式類似char (*p)[5];p優先和*結合,表示核心是指標,這個指標指向的是乙個陣列。

定義乙個陣列指標,賦值為陣列名,然後檢視陣列指標的運算性質:

#include

intmain()

;char

(*p)[5

];//定義乙個陣列指標

char (*p1)[5];char *p2;的區別:

C 陣列名與指標

1.緣起 由乙個題目引起的 問下面 輸出的是什麼?const char psz hello world int iarr cout sizeof psz endl cout sizeof iarr endl 前者輸出是4,輸出的是psz的型別大小,即指標型別佔4個位元組 在win32下 後者輸出是2...

陣列名與指標

引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊...

陣列名與指標

include using namespace std int main int b 2 10 陣列名本身就是指標,再加上 就變成了雙指標,這裡的雙指標的就是指二維陣列 int p int a 1 p指向a陣列的第6個元素 雖然不存在 cout p 1 cout b 1 cout b 0 retur...