C語言 關於指標兩種初始化賦值操作的思考

2021-08-19 21:42:08 字數 994 閱讀 8190

首先,什麼叫做指標的初始化?

int * p = null;在定義指標變數p的同時把p的值設定為0x00000000;而不是把*p的值設定為0x00000000。這個過程叫做初始化。

**: int * p = & a; 和 int * p = &(int )0x0012ff60; 的含義和區別

#include 

int main(void)

我們怎樣理解變數a呢?

乙個變數具有乙個變數名,對它賦值後就有乙個變數值,變數名和變數值是兩個不同的概念:變數名對應於記憶體單元的位址,表示變數在記憶體中的位置,而變數值則是放在記憶體單元中的資料,也就是記憶體單元的內容。變數名對應於位址,變數值對應於內容,應以區別。

​ 例如定義乙個整形變數int x,編譯器就會分配兩個儲存單元給x。如果給變數賦值,令x=30,這個值就會放入對應的儲存單元中。雖然這個位址是由編譯器分配的,但我們是無法事先確定的,但可以用取位址運算子&取出變數x的位址,例如取x變數的位址用&x。

我們怎樣理解&取位址運算子呢?

#include "stdio.h"

int main(void)

為什麼不能直接用int *p = 0x0012ff60來完成初始化操作呢?

我們知道:賦值符號「=」左右兩邊資料型別應相同,在這裡等號左右兩邊應同為指標型別。而0x0012ff60作為乙個整形資料是不能直接賦值給指標型別的。

那麼我們這麼寫可以嗎?int *p = &0x01000;

這顯然不行。因為對於乙個數值常量,它是沒有位址的。而變數之所以有位址就是因為要有乙個儲存單元對變數進行標識(當然,變數也可以直接對映到某個暫存器)。

我們將0x0012ff60強制型別轉換(int*),這時它也變成乙個指標型別,可完成賦值操作。

C語言指標的初始化和賦值

1 指標的初始化 指標初始化時,的右運算元必須為記憶體中資料的位址,不可以是變數,也不可以直接用整型位址值 但是int p 0 除外,該語句表示指標為空 此時,p只是表示定義的是個指標變數,並沒有間接取值的意思。例如 int a 25 int ptr a int b 10 int point b i...

C語言指標的初始化和賦值

1 指標的初始化 指標初始化時,的右運算元必須為記憶體中資料的位址,不可以是變數,也不可以直接用整型位址值 但是int p 0 除外,該語句表示指標為空 此時,p只是表示定義的是個指標變數,並沒有間接取值的意思。例如 int a 25 int ptr a int b 10 int point b i...

C語言指標的初始化和賦值

1 指標的初始化 初看起來,指標的初始化和賦值好像很混亂,又是 又是 時不時又出來乙個陣列。其實總結起來很簡單 int p int a 25 int b 10 int m a int n b int r b 0 指標的定義如上所示,以 打頭的變數代表該變數為指標變數。指標初始化時,的右運算元必須為記...