使用字串指標變數與字元陣列的區別
用字元陣列和字元指標變數都可實現字串的儲存和運算。 但是兩者是有區別的。在使用時應注意以下幾個問題:
1. 字串指標變數本身是乙個變數,用於存放字串的首位址。而字串本身是存放在以該首位址為首的一塊連續的記憶體空間中並以
『/0』
作為串的結束。字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。
2. 對字元陣列作初始化賦值,必須採用外部型別或靜態型別,如:
static char st=;
而對字串指標變數則無此限制,如:
char *ps="c language";
3. 對字串指標方式
char *ps="c language";
可以寫為:
char *ps;
ps="c language";
而對陣列方式: static char st=; 不能寫為: char st[20];st=; 而只能對字元陣列的各元素逐個賦值。
從以上幾點可以看出字串指標變數與字元陣列在使用時的區別,同時也可看出使用指標變數更加方便。前面說過,當乙個指標變數在未取得確定位址前使用是危險的,容易引起錯誤。但是對指標變數直接賦值是可以的。因為c
系統對指標變數賦值時要給以確定的位址。因此, char *ps="c langage"; 或者 char *ps; ps="c language";都是合法的。
函式指標變數
在c語言中規定,乙個函式總是占用一段連續的記憶體區, 而函式名就是該函式所佔記憶體區的首位址。 我們可以把函式的這個首位址(
或稱入口位址
)賦予乙個指標變數, 使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。 我們把這種指向函式的指標變數稱為
「函式指標變數
」。 函式指標變數定義的一般形式為: 型別說明符 (*
指標變數名
)(); 其中「
型別說明符
」表示被指函式的返回值的型別。
「(*
指標變數名
)」表示
「*」後面的變數是定義的指標變數。 最後的空括號表示指標變數所指的是乙個函式。 例如: int (*pf)(); 表示pf
是乙個指向函式入口的指標變數,該函式的返回值
(函式值
)是整型。 下面通過例子來說明用指標形式實現對函式呼叫的方法。
int max(int a,int b)
main()
從上述程式可以看出用,函式指標變數形式呼叫函式的步驟如下:1.
先定義函式指標變數,如後一程式中第9行
int (*pmax)();
定義pmax
為函式指標變數。
2. 把被調函式的入口位址
(函式名
)賦予該函式指標變數,如程式中第
11行
pmax=max;
3. 用函式指標變數形式呼叫函式,如程式第
14行
z=(*pmax)(x,y);
呼叫函式的一般形式為:
(*指標變數名
) (實參表
)使用函式指標變數還應注意以下兩點:
a. 函式指標變數不能進行算術運算,這是與陣列指標變數不同的。陣列指標變數加減乙個整數可使指標移動指向後面或前面的陣列元素,而函式指標的移動是毫無意義的。
b. 函式呼叫中
"(*指標變數名
)"的兩邊的括號不可少,其中的
*不應該理解為求值運算,在此處它只是一種表示符號。
黑馬程式設計師 C語言 指標
asp.net android ios開發 net培訓 期待與您交流!指標 指標是c語言中非常重要的資料型別 指標變數的定義 int p int是指標指向資料的型別 p是指標變數名稱 只是用來表示變數為指標變數 指標的使用 int a 10 int p p a 或者p a 表示將變數a的記憶體位址賦...
黑馬程式設計師 c語言指標
ios培訓 android培訓 期待與您交流!指標的定義 定義指標和定義乙個變數類似 資料型別 指標變數名 如 int p 表示定義乙個指向整形變數的指標 使用如下 int a 8 int p p a 指標變數 p中存放a的位址,可以通過p中存放的位址,可以訪問變數a中的值。訪問指標變數中存放的位址...
黑馬程式設計師 C語言 指標
一.指標的基本概念 number 10 是什麼意思呢?1.通過number這個位址,找到他指向的空間 2.到這個空間裡,取出裡面儲存的值 普通變數基本格式 變數型別 變數名 指標變數基本格式 變數型別 指標變數名 指標裡面存的是別的變數的位址 p來列印值是0x開頭的,16進製制數字 指標變數在記憶體...