關於C 指標的研究

2021-04-06 18:36:16 字數 1188 閱讀 9206

這2天,為了應付實習公司的面試,要求我在windows下寫乙個俄羅斯方塊出來

以前用j2me寫過乙個俄羅斯方塊,基本演算法和資料結構都有一定的考慮了,可動手開寫的時候c++的指標很是把我鬱悶了一陣,特別是關於陣列的指標和指標陣列等,一多了就攪在一起搞不清楚,昨天花了一下午基本上算是搞懂了,在這裡做個總結,也算是對的起自己一下午的勞動

int  one[2] =

cout<

得到的結果是0x0013ff34  0x0013ff34  3,這裡 b 和 &b的值是一樣的.

但是如果用乙個指標來指向它,如下

int * pone =  one;

cout<

得到的結果是0x0013ff34  0x0013ff3c  3, pone和&pone就不一樣了,如我們所期待的一樣.

這裡就可以得到乙個結論,列印陣列名得到的是陣列的起始位址,而列印&陣列名得到一樣的結果.但是這不能理解成 one = &one.我們可以用如下方式證明:

pone = one ;//success

pone = &one; //failed,因為&one 實際是乙個 int (*)[2]指標,它不能轉換成int *.

pone = *&one;//success

這樣,我們可以知道&one 是乙個int (*)[2]指標,*&one則是乙個int* 指標,**&one則會得到3,因此,我們還可以使用*&one[0] 來訪問one[0],*&one來訪問one[1];

現在,我們來定義乙個int (*)[2] 的指標,如下:

int (*ppone)[2] = &one; //success

cout<

輸出如下:0x0013ff34  0x0013ff30  0x0013ff34  3,這裡我們可以看到,ppone 與 &ppone 也是不相同的,  但ppone 與 *ppone相同,這是為什麼呢?我猜想可能是因為ppone = &one,而*ppone = *&one = one,而前面我們已經看到one 和 &one 的輸出是一樣的,因此這裡ppone 和 *ppone也得到了一樣的輸出,但是要注意它們2個乙個是int (*)[2],乙個是int *,是不一樣的. 

最後我們看一下

cout<<&ppone[0]<<&ppone[1];

輸出為  0x0013ff34  0x0013ff3c,這是因為ppone是乙個int (*)[2],因為它每次加1都要跨越2個int的長度.

關於C 指標

一.怎樣給多維陣列動態分配記憶體 allocate int p new int m for int i 0 i m i p i new int n use for int i 0 i m i for int j 0 j n j p i j i j free for int i 0 i m i del...

關於C指標

在 c語言中指標可以說是其精華,常有一句話,學會了指標你也就學會了 c語言。但是很多人不能理解指標。我寫這篇文章的目的是幫助大家理解指標,內容都是跟人的見解,沒有指標基礎的 c語言高手和不喜歡的就別看了。大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上。因此,說指標是 c...

關於各種字元陣列及指標的小研究

include include include include include include include include define local define maxn 10000 define maxint 2147483647 using namespace std ifstream f...