關於指標(c primer)

2021-06-21 14:51:05 字數 1734 閱讀 2109

對指標進行初始化或賦值只能使用以下四種型別的值:

1.0 值常量表示式,例如,在編譯時可獲得 0 值的整型const 物件或字面值常量 0。

2.型別匹配的物件的位址。

3.另一物件末的下一位址。

4.同型別的另乙個有效指標。

把 int 型變數賦給指標是非法的,儘管此 int 型變數的值可能為 0。但允許把數值 0

或在編譯時可獲得 0 值的const 量賦給指標:

int ival;

int zero = 0;

const int c_ival = 0;

int *pi = ival; // error:

piinitialized from int value of

ival

pi = zero; // error:

piassigned int value of zero

pi = c_ival; // ok:

c_ival

is a

const

with compile-time value of 0

pi = 0; // ok: directly initialize to literal constant 0

除了使用數值0或在編譯時值為 0 的 const 量外,還可以使用 c++ 語言從 c 語言中繼承下來的預處理器變數null(第 2.9.2 節),該變數在 cstdlib 標頭檔案中定義,其值為 0。如果在**中使用了這個預處理器變數,則編譯時會自動被數值 0 替換。因此,把指標初始化為null 等效於初始化為 0 值:

// cstdlib #defines null

to 0

int *pi = null; // ok: equivalent to

int *pi = 0;

c++ 提供了一種特殊的指標型別void*

double obj = 3.14;

double *pd = &obj;

// ok:

void*

can hold the address value of any data pointer type

void *pv = &obj; // obj

can be an object of any type

pv = pd; // pd

can be a pointer to any type

雖然使用引用(reference)和指標都可間接訪問另乙個值,但它們之間有兩個重要區別。

考慮以下兩個程式段。第乙個程式段將乙個指標賦給另一指標:

int ival = 1024, ival2 = 2048;

int *pi = &ival, *pi2 = &ival2;

pi = pi2; // pi

now points to

ival2

賦值結束後,pi 所指向的 ival 物件值保持不變,賦值操作修改了 pi 指標的值,使其指向另乙個不同的物件。現在考慮另一段相似的程式,使用兩個引用賦值:

int &ri = ival, &ri2 = ival2;

ri = ri2; // assigns

ival2

toival

這個賦值操作修改了 ri 引用的值 ival 物件,而並非引用本身。賦值後,這兩個引用還是分別指向原來關聯的物件,此時這兩個物件的值相等。

C primer筆記 指標

1 指標存放某個物件的位址,要想獲取該位址,需要使用取位址符 操作符 定義指標型別的方法將宣告符寫成 d的形式,其中d是變數名。引用不是物件,沒有實際位址,不能定義指向引用的指標 1 指向乙個物件 2 指向緊鄰物件所佔空間的下乙個位置 3 空指標,意味著指標沒有指向任何物件。4 無效指標,也就是上述...

《C Primer》引用和指標

學習c 的時候,我越來越感覺如果沒有真正學會引用和指標,那麼其他的部分就非常難以理解。因此,對於c 來說,引用和指標是絕對基礎而又重要的。我們可以想象一下,對門王奶奶養了乙隻加菲貓,王奶奶給這只貓起名字叫 球球 那麼,球球 就是 王奶奶的加菲貓 這個物件的引用。由此引出了引用的定義 引用為物件起了另...

C Primer 引用 指標 常量

定義引用時,程式把引用和它的初始值繫結在一起,而不是把初始值拷貝給引用。一旦初始化完成,引用將和它的初始值物件一直繫結在一起,因此無法讓引用繫結另乙個物件,所以引用必須初始化。所有引用的型別都必須要和與之繫結的物件嚴格匹配,而且引用只能繫結在物件上,而不能和字面值或表示式的結果繫結在一起,以下兩種情...