當前位置:才華齋>計算機>C語言>

C語言中各種型別指標的特性與用法介紹

C語言 閱讀(4.85K)

本文主要介紹了C語言中各種型別指標的特性與用法,有需要的朋友可以參考一下!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

C語言中各種型別指標的特性與用法介紹

  指標為什麼要區分型別:

在同一種編譯器環境下,一個指標變數所佔用的記憶體空間是固定的。比如,在16位編譯器環境 下,任何一個指標變數都只佔用8個位元組,並不會隨所指向變數的型別而改變。

雖然所有的指標都只佔8個位元組,但不同型別的變數卻佔不同的位元組數。

一個int佔用4個位元組,一個char佔用1個位元組,而一個double佔用8位元組;

現在只有一個地址,我怎麼才能知道要從這個地址開始向後訪問多少個位元組的儲存空間呢,是4個,是1個,還是8個。

所以指標變數需要它所指向的資料型別告訴它要訪問多少個位元組儲存空間。

也就是說,如果不指定指標的型別,那麼當指標指向一個變數的時候,她從首地址開始,但是它不知道什麼時候停止,它不知道要訪問多少個儲存空間。比如有一個char型別的變數,我用一個指標指向它,但是這個指標我設定成int型別,這樣一來這個指標就會向後訪問四個位元組的儲存空間,很明顯得到的結果不是char型別應該得到的,所以要區分型別。

  只有指標是可以運算(移動)的`,陣列名是不可以的。

int x[10];

x++; //illegal

int* p = x;

p++; //legal

兩指標變數相減所得之差是兩個指標所指陣列元素之間相差的元素個數。

實際上是兩個指標值(地址)相減之差再除以該陣列元素的長度(位元組數)。

(pointer2地址值 - pointer地址值) / sizeof(所指向資料型別)

指標之間可以相減,但不可以相加(相加無意義)。

定義字串:

字元陣列:

char string[] = "hello";

printf("%s",string);

  字串指標指向字串:

char *str = "hello"

使用字元陣列來儲存的字串是存在”棧”裡的,所以它是可讀可寫的,所以我們可以修改字元數組裡的某個元素的值。

但是,使用字元指標來儲存字串,它儲存的是字串常量地址,"常量區"是隻讀的,所以是不可改的。

char *str = "hello";

*(str+1) = 'w'; // 錯誤

使用注意:

char *str;

scanf("%s", str);

/* str是一個野指標,他並沒有指向某一塊記憶體空間,所以不允許這樣寫。如果給str分配記憶體空間是可以這樣用的 */

/********* 陣列的方法****************/

char name[20];

scanf("%s",name);

/************* 給字元針針分配記憶體空間的辦法***********/

char *name;

name=(char*)malloc(50); //此時name已經指向一個剛剛分配的地址空間。

scanf("%s",name);

?

  指標函式(是函式,返回值是指標)注意:

如果函式返回一個字串,那麼如果用一個數組以下面的形式來接的話,是會報錯的:

char *test() {

return "hello";

}

int main(int argc, const char * argv[]) {

char names[10];

names = test();

return 0;

}

這是因為,返回的字串相當於一個這樣的陣列:{‘h', ‘e', ‘l', ‘l', ‘o', ‘