指標之 一級二級多級指標

2021-10-03 20:37:34 字數 1476 閱讀 2759

from:

指標,c語言永恆的話題。關於指標,在《c和指標》上是這樣形容的,指標就是位址的另外乙個叫法。所以我們要明白,指標和指標變數的區別,指標就是位址,指標變數是存放指標的變數,即指標變數存放的是位址,我們通過間接訪問符可以得到該位址的內容。但是,在一般情況下,我們都把指標變數說成指標這樣的簡稱。例如:void (*fuc)(int a);我們會說fuc是乙個指標,指向乙個引數為int返回值為void的函式。這個時候我們並不它稱作指標變數,而籠統地稱為指標,因為我們使用指標的情況下,大多是在操作指標變數,但是,在某些情況下,需要精確表述時,應該明白,指標變數是存放位址(指標)的,指標就是乙個位址。後面所說的指標,不特殊說明,都指指標變數,因為指標和指標變數大部分時候我們不是去區分它的文字定義,而是怎麼去使用它,最主要是因為這已經三人成虎了。比如,char *p=null;我們都說p是乙個指標,其實嚴格來說這個p是指標變數。因為定義乙個指標型別的變數,必然在記憶體中開闢了空間,就是指標變數了,但已經被大家都這樣叫指標了,所以,雖然我們這樣叫著,但具體含義還是要清楚的。我們使用賦值方式給乙個「指標」的時候,這個指標一定已經是指標變數了,因為位址不能做左值,位址對應的記憶體空間才可以。不過始終得有個約定吧,所以就先統稱指標了。

指標就是為間接賦值或者說間接改變某些東西存在的。

eg:

1 #define _crt_secure_no_warnings

2 #include3

4 int main()

5

可能在這裡你會覺得,既然一級指標就已經能夠更改乙個位址的變數了,為什麼還要二級指標或者多級指標呢?

一級指標用普通變數的位址去接,二級指標用一級指標的位址去接,n級指標用n-1級指標的位址去接。

我們在乙個程式中已經使用了一級指標了,如果我們想修改這個一級指標或者這個一級指標指向的內容,就會使用到二級指標了,但是,為了**的可讀性,最好用二級以下的指標解決。

指標變數需要指向乙個記憶體空間,記憶體空間相當於門牌號,而對乙個指標解引用(*),相當於間接訪問這個指標變數中儲存的位址裡面對應的內容,(*)相當於一把鑰匙開啟了房門。

eg:

1 #define _crt_secure_no_warnings

2 #include3

4 int main()

5

再來乙個體現二級指標用法的例子:

1 #define _crt_secure_no_warnings

2 #include3 //還是可以更改a的值,因為mp和p都指向a的位址,但要是我現在設計需求要改變p的值呢?

4 void two_pointer(int *mp)

5 8 //要改變p的值,當然和普通變數a一樣,可以直接修改,也可以間接修改

9 //和普通變數a有需要間接修改的需求一樣,指標變數p也有這樣的需求

10 //此時,二級指標就來了

11 void two_pointer2(int **mmp)

12 21 int main()

22

請君多思量,指標不過如此。

指標之 一級二級多級指標

指標,c語言永恆的話題。關於指標,在 c和指標 上是這樣形容的,指標就是位址的另外乙個叫法。所以我們要明白,指標和指標變數的區別,指標就是位址,指標變數是存放指標的變數,即指標變數存放的是位址,我們通過間接訪問符可以得到該位址的內容。但是,在一般情況下,我們都把指標變數說成指標這樣的簡稱。例如 vo...

指標之 一級二級多級指標

指標,c語言永恆的話題。關於指標,在 c和指標 上是這樣形容的,指標就是位址的另外乙個叫法。所以我們要明白,指標和指標變數的區別,指標就是位址,指標變數是存放指標的變數,即指標變數存放的是位址,我們通過間接訪問符可以得到該位址的內容。但是,在一般情況下,我們都把指標變數說成指標這樣的簡稱。例如 vo...

一級指標二級指標

例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...