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。
第一次寫技術方面的文章。語意不順之處請見諒。 本人對指針的也是出於模糊之間,若觀點有錯,請大神們指出,讓小弟改正過來。

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