c 指標 陣列區別

2021-06-19 22:40:37 字數 844 閱讀 7739

c++/c程式中,指標和陣列在不少地方可以相互替換著用,讓人產生一種錯覺,以為兩者是等價的。

陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。陣列名對應著(而不是指向)一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。

指標可以隨時指向任意型別的記憶體塊,它的特徵是「可變」,所以我們常用指標來操作動態記憶體。指標遠比陣列靈活,但也更危險。

修改內容時,設字元陣列a的容量是6個字元,其內容為hello\0。a的內容可以改變,如a[0]= 『x』。指標p指向常量字串「world」(位於靜態儲存區,內容為world\0),常量字串的內容是不可以被修改的。從語法上看,編譯器並不覺得語句p[0]= 『x』有什麼不妥,但是該語句企圖修改常量字串的內容而導致執行錯誤。

不能對陣列名進行直接複製與比較。想把陣列a的內容複製給陣列b,不能用語句 b = a ,否則將產生編譯錯誤。應該用標準庫函式strcpy進行複製。同理,比較b和a的內容是否相同,不能用if(b==a) 來判斷,應該用標準庫函式strcmp進行比較。對於指標,語句p = a 並不能把a的內容複製指標p,而是把a的位址賦給了p。要想複製a的內容,可以先用庫函式malloc為p申請一塊容量為strlen(a)+1個字元的記憶體,再用strcpy進行字串複製。同理,語句if(p==a) 比較的不是內容而是位址,應該用庫函式strcmp來比較。

用運算子sizeof可以計算出陣列的容量(位元組數)。設指標p指向a,但是sizeof(p)的值卻是4。這是因為sizeof(p)得到的是乙個指標變數的位元組數,相當於sizeof(char*),而不是p所指的記憶體容量。c++/c語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。

注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

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

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

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語言 陣列指標詳解,區別於指標陣列。

題意 使用指標 p 和prt 表示a 1 2 include include include include using namespace std int main int prt 3 a 不等於 prt 4 意義不同,用法相同 int t 4 指標陣列,即宣告了4個指標,要for迴圈初始化分別指...