C語言之指標 1

2021-08-09 06:26:35 字數 934 閱讀 1434

第一次寫部落格,若有不當之處,請指出,謝謝。

最近忙於面試,對於指標有一點新的認識,寫下感悟與大家分享。

面試題目,將0x04030201變成0x01020304,剛開始沒有多想,之前寫過暫存器,就想了乙個蠢方法。

通過按位與將0x04030201中的4個位元組拆成0x04,0x03,0x02,0x01,然後通過移位運算將0x01變成0x01000000,0x02變成0x00020000,0x03變成0x00000300,0x04不變,最後將這些資料組合起來,就能得到0x01020304。這是我給的答案,然後面試官一臉黑線,我想我是搞砸了。

面試官給了乙個提示如下:

int num = 0x04030201;

char * p = (char *)#

看到上面的寫法,剛開始有點懵逼,從來沒有這麼幹過,當時一緊張,沒答上來,面試沒戲了。回來的路上,一直在想這是個啥意思呢?然後在虛擬機器上跑了以下得到如下資料:

*p = 1;

p++;

*p = 2;

p++;

*p = 3;

p++;

*p = 4;

看到這些資料感覺是不是狠熟悉呢?它將之前我做的那些拆解過程,全部實現了。

分析如下:

int num = 0x04030201;將0x04030201以32位的資料形式放在記憶體中,通常我們會定義乙個整型指標來指向這個記憶體位址,然後可以直接獲取到num的值。但是現在它是將乙個char型的指標指向這個記憶體位址,char 型與int 型指標的區別在**呢?偏移大小不一樣,指標在32位機器上,位址就是4個位元組,但是int型指標每次偏移就是乙個int,也就是4個位元組,char 型指標,每次偏移就是乙個char,也就是乙個位元組。

有了上述分析,之前的問題也就引刃而解了。

總結;正如書中所說,指標就是位址,問題是這位址代表的是什麼意思?通過這個位址,我們能訪問的記憶體空間中的內容是什麼?

C語言之指標(1)

1.廣義上說,常說的 指標 包括指標變數和指標常量,它們統稱為指標,在大多說情況下,指標指指標變數,存放記憶體位址。2.指標變數的型別作用 某型別一級指標變數 該型別一級位址 某型別二級指標變數 該型別一級指標變數 n 1級指標變數 n級指標變數 int p a p中只存放了a首位元組位址,但是in...

指標 C語言之魂(1)

根據自己的學習進度,本篇部落格將會對c語言的靈魂部分 指標做乙個初級的描述,以及一些基本細節的講解。歡迎閱讀指正。指標 pointer 是程式語言中的乙個物件,利用位址,它的值直接指向 points to 存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。...

C語言之指標

指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...