指針是C語言最重要的特性之一,
也是最容易被誤解的特性之一。
現代計算機把內存分割為字節(Byte),
每個字節都有唯一的地址(Address),
如果內存中有n個字節,可以把地址看做0~n-1的數。
程序中的每個變量都占據字節(至少1字節),把第一個字節的地址稱為”變量的地址”,
假設變量int i占有內存2000~2003,則變量i的地址是2000。
指針變量(pointer variable)
口訣:
變量有位置,位置有地址
指針是變量,其值為地址
指針就是地址,指針變量就是存儲地址的變量。
C語言要求每個指針變量只能指向一種特定的類型的對象。
int *p;
double *q;
char *r;
指針變量的賦值:
int i=2099;
int* p;
P = &i;
printf("%d", *p);
值和地址
&取地址運算符
*間接尋址運算符
下例中:
i是普通變量,&i是存儲變量的地址
p是指針,是地址,*p是指針指向地址的值
#include <stdio.h>
main() {
int i=2099;
printf("變量的值:%d\n", i );
printf("變量的地址:%x\n", &i );
int *p;
p = &i;
printf("指針(值):%d\n", *p );
printf("指針(地址):%x\n", p );
}
NULL指針
在變量聲明時,如果沒有確切的地址可賦值,為指針變量賦一個NULL值是一個良好的編程習慣。
賦為NULL值的指針稱為“空指針”。
#include <stdio.h>
int main(int argc, char *argv[]) {
int *ptr = NULL;
printf("ptr的值是:char=%x, int=%d\n",ptr,ptr);
return 0;
}
運行結果:
ptr的值是:char=0, int=0