指標的初始化

2021-06-22 20:59:18 字數 1459 閱讀 9964

指標代表的是記憶體單元的編號或位址,通過指標就可以找到對應的記憶體單元。對指標進行初始化或賦值的實質是將乙個位址或同型別(或相相容的型別)的指標賦給它,而不管這個位址是怎麼取得的。

1、指標的初始化

指標初始化時,「=」的右運算元必須為記憶體中資料的位址,不可以是變數,也不可以直接用整型位址值(但是int*p=0;除外,該語句表示指標為空)。

對指標進行初始化時常用的有以下幾種方式:

1.採用null或空指標常量,如:int *p = null;或 char *p = 2-2; 或float *p = 0;

3.將乙個指標常量賦給乙個指標,如:long *p = (long *)0xfffffff0;

4.將乙個t型別陣列的名字賦給乙個相同型別的指標,如:char ary[100]; char *cp = ary;

6.將乙個字串常量賦給乙個字元指標,如:char *cp = 「abcdefg」;

ansi c定義了零指標常量的概念:乙個具有0值的整形常量表示式,或者此類表示式被強制轉換為void *型別,則稱為空指標常量,它可以用來初始化或賦給任何型別的指標。也就是說,我們可以將0、0l、'/0'、2–2、0*5以及(void *)0賦給乙個任何型別的指標,此後這個指標就成為乙個空指標,由系統保證空指標不指向任何物件或函式。

ansi c還定義了乙個巨集null,用來表示空指標常量。大多數c語言的實現中null是採用後面這種方式定義的:#define null ((void *)0)。

例如:int a = 25;

int *ptr = &a;

int b[10];

int *point = b;

int *p = &b[0];

2、指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元可以是*p,也可以是p。

當「=」的左運算元是*p時,改變的是p所指向的位址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的位址。

常見錯誤:

如果:int *p;

*p = 7;

則編譯器(vs2008)會提示the variable 'p' is being used without being initialized.即使用了未初始化的變數p。

因為p是指向7所在的位址,*p = 7給p所指向的記憶體賦值,p沒有賦值,所以p所指向的記憶體位置是隨機的,沒有初始化的。

int k;

int *p;

p = &k; //給p賦值

*p = 7; //給p所指向的記憶體賦值,即k= 7

陣列的變數名b表示該陣列的首位址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

初始化指標

includeusing namespace std int main nullptr 是 c 新標準引入的特性,visual c 2010 編譯器支援它。過去已經使用0或 null 編譯器將用 0代替此巨集 來初始化指標,當然它們現在仍然可以使用。但是,使用 nullptr 初始化指標要好得多。因...

指標的初始化

下面的函式有什麼錯誤 int square volatile int ptr 這段 的目的是用來返指標 ptr指向值的平方,但是,由 於 ptr指向乙個volatile型引數,編譯器將產生類似下面的 int square volatile int ptr 由於 ptr的值可能被意想不到地該變,因此a...

指標的初始化

1.字元指標的初始化 在c語言中 string 儲存的就是首個字元所在的位址 所以可以把 字串常量 string 賦值給指標 char p p string 但不能把字串常量直接賦給陣列,需要用到 strcpy。但可以對陣列初始化為字串,也就是字元陣列。如 char str string 兩種初始化...