C语言讲义——指针(pointer)
指针是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