指針型數據

計算機語言中的一種數據類型。

基本信息

數據類型

見下表

定義 含義
int i; 定義整型變數i。
int *p; p為指向整型變數的指針變數。
int a[n]; 定義整型數組a他有n個元素。
int *p[n]; 定義指針數組p,它由n個指向整型數據的指針元素組成。
int (*p)[n]; p為指向含n個元素的一維數組的指針變數。
int f(); f為帶回整型函式值的函式。
int *p(); p為帶回一個指針的函式,該指針指向整型數據。
int (*p); p為指向函式的指針,該函式返回一個整型值。
int **p; p是一個指針變數,它指向一個指向整型數據的指針變數。

指針運算小結

1、指針變數加減一個整數

如:p++ p-- p+i p-i p+=i p-=i 等

實際含義如 p+i 代表地址計算: p+c*i , c為位元組數,整型c=2、

實型c=4、字元型c=1。

值得注意的是:P++(或P--)所表示的是指針方向發生了改變而P+i(或P-i)表示的是指針方向不發生改變。

2、指針變數賦值

如:p=&a a為變數,p為指針變數

p=array array為數組名

p=&array

p=max max為函式名

p1=p2 p2為指針變數

注意:不能把一個整數或常數賦給p,如p=1000 同樣也不能把p賦給整型變數,如i=p

3、指針變數可以賦空值

如: p=NULL; 實際NULL是整數0。

4、兩個指針變數可以相減如兩個指針變數指向同一個數組的元素(右圖),

則 p2-p1=4-1=3但p1+p2無意義。

5、兩個指針變數比較

若兩個指針指向同一個數組的元素,則可以比較,

如: p1<p2 p1>p2

三、空類型指針

ANSI新標準增加了一種空類型指針,定義的一般形式為:

void * 變數名

具體使用時要做類型轉換,如:

void *p; (int *)p;

指針使用方法

1、在使用指針時,必須進行初始化,如果沒有直接所指示對像可以將指針變數指向NULL;

例如: int *p = NULL;

2、在指針使用完後,指針所指向的內在空間已經被釋放,則指針應該指向NULL,否則會出現游離狀態,這樣的指針對整個程式都有一定的威脅;

例如:

int *p = NULL;

p = (int *)malloc(sizeof(int));

if(NULL == p)

{

return -1;

}

所申請的記憶體用完並被釋放後,需要將所指向的指針指向NULL;即 p = NULL;

3、可以使用指針引用結構體成員變數,使用方法是:

typedef struct

{

int a;

int b;

}TEST_S;

TEST_S test;

int main(void)

{

TEST_S *pTest = NULL;

pTest = &test;

pTest->a = 10;

pTest->b = 20;

return 0;

}

在使用結構體指針時,首先應將結構體指針指向結構體,只有指針指向結構體後,才可以使用指針引用結構體中的成員變數,可以實現對結構中的成員變數進行賦值、完成相應運算。

4、指針變數做函式參數

例如:

void _Test_Swp(int *p, int *q)

{

int swp;

swp = *p;

*p = *q;

*q =swp;

}

main()

{

int *q = NULL;

int *p = NULL;

int a= 10;

int b = 20;

p = &a;

q = &b;

_Test_Swp(p, q);

printf("%d, %d\n", a, b);

}

該函式可以實現兩個整型數的調換,其中p、q就是做為函式的參數進行傳遞的;

相關詞條

熱門詞條

聯絡我們