最近看c語言,把以前不怎麼懂的指標做個筆記:
宣告指標:
int *pointer = null;
未初始化的指標是非常危險的,所以應總是在宣告指標時初始化。
對已宣告的變數位址初始化,使用& ,如
int number = 10;
int *pointer = &number;
注意:number的宣告必須在pointer的宣告之前。
通過指標訪問值:
假設宣告以下變數:
int number=15;
int *pointer = &number;
int result=0;
result=*pointer+5;
使用指標:
pointer=# //使用定址運算子獲取num的位址,並將它儲存在pointer中。
++*pointer遞增pointer的值,但如果使用後置形式,必須寫成(*pointer)++,括號指定要遞增的是數值,不是位址。
可以用scanf("%d",pointer);輸入數值。
指向常量的指標:
宣告指標時,可以使用const關鍵字,該指標指向的值不能改變。
long value=9999l;
const long *pvalue=&value;
pvalue指向的值不能改變,但可以對value進行任意操作。
value=7777l;
改變了pvalue指向的值,但不能使用pvalue指標做這個變數。指標本身不是常量,所以仍可以改變它指向的值:
long number=8888l;
pvalue=&number;
這會改變指向number的pvalue中的位址,仍不能使用指標改變它指向的值。可以改變指標中儲存的位址,但不允許使用指標改變它指向的值。
常量指標
int count=43;
int *const pcount = &count;
第二條語句宣告並初始化了pcount,指定該指標儲存的位址不能改變。
但使用pcount,仍可以改變pcount指向的值:
*pcount=345;
可以建立乙個常量指標,它指向乙個常量值:
int item=25;
const int *count pitem=&item;
pitem是乙個指向常量變數的變數指標,所以所有的資訊都是固定不變的。
分配記憶體:
malloc()函式 需要在程式中包含標頭檔案
例如給75個int型別的資料項分配記憶體,可以使用以下語句:
pnumber=(int *) malloc(75*sizeof(int));
calloc()函式 在宣告的calloc()函式於malloc()函式相比有兩個優點:第一,它把記憶體分配給指定大小的陣列;第二,它初始化了所配置的記憶體,所有的位都是0。
使用calloc()為包含75個int元素的陣列分配記憶體:
pnumber = (int *)calloc(75, sizeof(int));
如果不能分配所請求的記憶體,返回值就是null,也可以檢查記憶體的結果,這非常類似malloc,但calloc分配的記憶體區域都會初始化為0。
釋放動態分配的記憶體:
free(pnumber);
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...
c語言指標
編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...