int a=10 00000000H 00000001H (定义别的变量) int p; 00000005H 00000006H 10 p=&a; P 00000064H 00000065H 00000005H 程序片段 40000000H 变量名 变量地址 变量值 图7-4变量在内存中的存储分配x字 TY OF TECHNOLOG 200820:52
2008 20:52 21 图 7-4 变量在内存中的存储分配 程序片段 int a=10; …….. ……..(定义别的变量) int * p; p=&a; ········ 00000000H 00000001H ········ 00000006H 00000005H ········ 00000065H ········ 40000000H 00000064H ········ ········ a ········ ········ ········ P ········ ········ 10 00000005H ········ ········ ········ ········ 变量名 变量地址 变量值
72.2指针变量的赋值 初始化赋值 「存储类型数据类型*指针名=初始地址值; 例inti 变量些须已说明过 类型应一致 int *p=&i; 例inti 用已初始化指针变量作初值 int pI≡&i; int *p2= pl int i, *pi=&i float pf; × pf=pi 22 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 22 例 int i; int *p = &i; 例 int *p = &i; int i; 7.2.2 指针变量的赋值 ➢ 初始化赋值 [存储类型] 数据类型 *指针名 = 初始地址值; 变量必须已说明过 类型应一致 例 int i; int *p1 = &i; int *p2 = p1; 用已初始化指针变量作初值 例 int i, *pi = &i; float *pf; pf=pi;
赋值语句赋值 整型变量a 20 int a=20 int“p,*q; ←指针变量p 2000 &a ←指针变量q 2000- q-p, 及门理享 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 23 ➢ 赋值语句赋值 例 int a = 20 ; int *p, *q; p = &a; q = p; 整型变量a 指针变量p 指针变量q … …... 2000 …... …... 20 2000 2000
描针量值的几种方法 变量a的定义在后,对 注危:一个指针变量只能指向同类型的变量如果 给指针赋值时,三右边的指针类型与左边的指钏 类型不同,则要进行类型强制转换。 nt a int“pi; char x C p pi=&a /pi指向a pc=( char s)pi;lpc指向a,即p和pc的值都是a 的地址 不能用auto变量的地 例inta: 址去初始化 static型指 24 static int *p=&a 针
2008 20:52 24 例 int *p = &a; int a; 指针变量赋值的几种错误方法: 变量a的定义在后,对 a的引用超出了a的作 用域 例 int a; int *pi = &a; char *pc = &a; pc不能指向非字符型变 量 例 int a; int *p; *p = &a; 赋值语句中,被赋值的 指针变量p的前面不能 再加“*”说明符 例 int *p; p = 2000; 不允许直接把一个数赋 值给指针变量 例 int a; static int *p = &a; 不能用auto变量的地 址去初始化static型指 针 注意:一个指针变量只能指向同类型的变量如果 给指针赋值时,=号右边的指针类型与左边的指针 类型不同,则需要进行类型强制转换。 int a; int *pi; char *pc; pi = &a; //pi指向a pc = (char *)pi; //pc指向a,即pi和pc的值都是a 的地址
零指针与空类型指针 p指向地址为0的单元, 系统保证该单元不作它用 定义:指针变量值为零 表示指针变量值没有意义 表示:int*p= 例 #define null o int“p int *p= NULL while(p!= null p=NULL与未对p赋值不同 ●用途: √避免指针变量的非法引用 例char*pl; √在程序中常作为状态比较 void*类型指针 表示 void“p2; 类型犭p1=(char加2; 表示:void*p p2=(void * pl; 使用时要进行强制类型转换 25 及 XIAMEN UNIVERSITY OF TECHNOLOGY 2008 20: 52
2008 20:52 25 零指针与空类型指针 ➢ 零指针: ⚫ 定义: 指针变量值为零 ⚫ 表示:int * p = 0; p指向地址为0的单元, 系统保证该单元不作它用 表示指针变量值没有意义 #define NULL 0 int *p = NULL; ⚫ p = NULL与未对p赋值不同 ⚫ 用途: ✓避免指针变量的非法引用 ✓在程序中常作为状态比较 例 int *p; ...... while (p != NULL) { ...… } ➢ void *类型指针 ⚫ 表示: void *p; ⚫ 使用时要进行强制类型转换 表示不指定p是指向哪一种 类型数据的指针变量 例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;