數組和指針的區別

一、指針和數組的區別

組要麼在靜態存儲區被創建(如全局數組),要麼在棧上被創建。數組名對應着(而不是指向)一塊內存,其地址與容量在生命期內保持不變,只有數組的內容可以改變。

1、從編譯器的角度進行區分

指針在定義的時候,編譯器並不會爲指針所指向的對象分配內存空間,它只是分配指針變量的空間。除非以一個字符串常量對其進行初始化。下面的定義創建了一個字符串常量(爲其分配了內存空間)

char *p = "abcd";

  在ANSI C中,初始化指針時所指向的字符串被定義爲只讀,如果想通過指針修改字符串的時候,會產生未定義的行爲。

數組也可以用字符串常量進行初始化,但是其內容可以被修改。

int a[5];

int *b;

編譯器將根據聲明所指定的元素數量爲數組保留內存空間,然後再創建數組名,它的值是一個常量,指向一段空間的起始地址。聲明一個指針變量時,編譯器只爲指針本身保留內存空間,它並不爲任何整型值分配內存空間。並且指針未初始化爲指向任何現有的內存空間。

此外,c標準對指針的解釋:指針是一個變量,變量的值是另外一個變量的地址。那麼,既然指針是變量,那麼指針必然有自己的存儲空間,只不過是該存儲空間內的值是一個地址值,而不是別的內容。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章