c語言 指標

2022-08-17 04:09:23 字數 1611 閱讀 4474

最近看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...