1. 程式人生 > >C指標和陣列的區別

C指標和陣列的區別

對於指標和陣列的問題已經困擾我許久。今天在打程式碼的時候,用到了很多指標和陣列的問題。
當初在C與指標中看到,陣列可以跟操作指標一樣。
例如:
char buffer[1024];
char *p; //一個指向字串的指標

p = buffer; // buffer 等價於一個指標,我們將其賦值給指標變數是沒有問題的。
            //也可以類似於p = &buffer[0]; 這樣同樣是指向buffer字串
(++p) 等價於 buffer[1]嗎  答案是正確的 !!!
我們是不是可以感覺到 腳標的引用是不是等於指標變數的變化 buffer[0] = *(p+0)
只是腳標的引用還把那個地址所指向的值給取出來。

然後又有一個問題就是:

**buffer[1] 等價於 buffer++** ? ; 答案是錯誤的。!!!
這也就我這篇文章的重點。 沒錯 陣列名是一個指標型資料。
可是資料分為兩種 常量和變數。
什麼是常量? 1 就是int型的常量。 1能自增,然後存在自己身上嗎? 不能。
顯而易見 1 = 1+1?  無論從數學角度還是計算機的角度來看。 這都是不成立的 !

所以我們能夠明白 為什麼buffer 不能夠自增,而p 卻可以,P是我們自己定義的,來存放指標的指標變數,他的值是可以變的。 Buffer 更像是一個地址一個一串數字的地址,(0xff222122)一個指向一個地址的數字。它不需要一個變數,一個東西來指向他,就像數字 1 。我們每次用1的時候我麼都是直接 打1。 1就是常量。

我們記住一個重點就可以,我們也不必被搞混。

陣列是指標型別的。 只是他是一個指標常量。
指標(我們經常用的指標變數)也是指標型別,這點毋庸置疑。只是他是一個指標變數。

通俗的來說。
指標變數 p 。 就是這個p 指向一個地址,通過P 我們就能夠訪問到這個地址裡面資料。
指標常量 buffer 他本是就是一個地址。 我們可以把buffer 賦值給 p 就像 int I = 1;
把一賦值給i。
第一次寫技術方面的文章。語意不順之處請見諒。 本人對指標的也是出於模糊之間,若觀點有錯,請大神們指出,讓小弟改正過來。