我正在學習 C 語言的入門課程。我們剛剛介紹了指標,而我們當前的實驗室只是將我們的代碼從陣串列示法更改為指標表示法。我知道在 Codeblocks 中,存盤一個 int 變數需要 4 個位元組。所以,我分配了一個指向陣列前面的指標,根據課堂上的講座和實驗,我知道通過增加指標,我可以改變指標指向的陣列元素。我認為增加 4 將允許我轉到陣列的下一個元素。
但是,每當我列印指標、運行pointer =4并再次列印指標時,它實際上將指標的值更改了 16。事實上,任何增量都會更改為 4 的倍數。目前,我的代碼運行良好,而不是使用pointer .
我的代碼運行良好,所以這應該不是問題,但我想知道是否有人可以給我更多關于為什么會這樣的資訊,以及關于 Codeblocks 如何存盤記憶體的任何其他資訊?
uj5u.com熱心網友回復:
指標運算總是在指標的基本單元中完成。因此,如果您有一個指向int(ie int *) 的指標,那么對該指標進行算術運算將以int.
所以讓我們說你有
int arr[] = { 1, 2, 3, 4 };
int *ptr = arr;
thenptr將指向陣列中的第一個元素,arr[0].
現在,如果我們增加指標ptr(ptr = ptr 1或ptr = 1或ptr ),那么ptr將指向陣列的第二個元素arr[1]。
你需要可視化它,讓我們arr用指標和一些指標演算法“繪制”陣列:
----- ----- ----- ------ | 1 | 2 | 3 | 4 | ----- ----- ----- ------ ^ ^ ^ ^ | | | | 指標 指標 1 指標 2 指標 3
從這里你應該開始看到對應于陣列索引的模式...ptr 1指向第二個元素,就像arr[1](and ptr[1]) 是第二個元素的值一樣。
事實上,所有這些都是為什么arr[i]完全等于*(arr i)以及陣列到指標衰減的基礎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430747.html
上一篇:golang為什么比較指向結構的兩個變數的行為不同?
下一篇:在c中列印char指標值
