指针变量的基本操作基本操作
int a,*iptr,*jptr,*kptr;
iptr = &a;
jptr = iptr;
*jptr = 100;
kptr = NULL;
- 己址和己空间
- 指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machine word),32位的CPU和操作系统就是32个位,4个字节,其值域为:0x-0xFFFFFFFF。64位的CPU和操作系统就是64个位,8个字节,其值域为:0x-0xFFFFFFFFFFFFFFFF。
- 己值、他址、他空间
- 指针变量的值就是其指向的空间的地址,指向的地址的空间大小就是指针变量指向类型的大小。
声明与初始化
int *ptr;
int *ptr_2;
int a = 1;
ptr_2 = &a;
// *ptr = 0; // 非法操作,其指向其指向的内存空间还未确定
ptr = &a; // ① 右值是一个变量地址
ptr = ptr_2; // ② 右值是一个同类型指针,且已初始化
ptr = (int*)malloc(sizeof(int));// ③ 右值是一个内存分配函数返回一个void指针
*ptr = 0; // 合法操作,ptr有了确定的指向及指向的内存空间;
函数之间指针值的传递
函数(如下例的funcForSpace())内定义局部变量(如下例的a)保存在一个函数的栈帧上,当一个函数执行完毕后,另一个函数(如下例的stackFrame_reuse())执行时,该空间会被stackFrame_reuse()重复使用,a所使用的空间将不复存在,所以当一个指针变量指向局部变量的内存空间时,其地址值传递给主调函数时,并不是一个有效值。