C 的一些學習技巧!

2021-07-06 01:22:48 字數 1369 閱讀 5897

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

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;也是正確的

同型別的指標賦值:

C 一些技巧

一如果函式對傳入的指標引數進行修改,一定要把引數設定為指標的指標或者指標的引用 delete the first occurrence of the node which value equals item in a single linked list void delete node head,...

學習java的一些技巧!

不知不覺做軟體已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成為高手的捷徑,但一些基本原則是可以遵循的。1.紮實的基礎。資料結構 離散數學 編譯原理,這些是所有電腦科學的基礎,如果不掌握他們,很難寫出高水平的程式。據我的觀...

c 程式設計的一些技巧

第一點,使用全域性物件的建構函式在程式啟動前呼叫函式 有一些應用程式需要在主程式啟動前呼叫其它函式。如 轉態過程函式 登記 功能函式都是必須在實際程式執行前被呼叫的。最簡單的辦法是通過乙個全域性物件 的建構函式來呼叫這些函式。因為全域性物件都是在主程式開始前被構造,這些函式 都將會在main 之前返...