把一个指针的值赋给另一个指针,但不能直接用整 型数据赋值给指针变量。 int*p=1000ll错误 main(){ main(){ int a=100,b,*p; int *pl,*p2,a-5; p=&a; float b=10.5; printf("d,%d n",a,*p); *pl=a; *p=1000; p2=&b: printf("d,%dn",a,*p); printf(od,%d\n",(*p1),(*p2)); 100,100 使用未赋值的指针变量 1000,1000 类型不匹配
把一个指针的值赋给另一个指针,但不能直接用整 型数据赋值给指针变量。 int *p=1000 !!!错误 main( ) { int a=100 , b , *p ; p=&a ; printf(“%d,%d\n” ,a ,*p); *p=1000; printf(“%d,%d\n”,a,*p); } 100, 100 1000, 1000 main( ) { int *p1,*p2,a=5; float b=10.5; *p1=a; p2=&b; printf(“%d,%d\n”,(*p1),(*p2)); } 使用未赋值的指针变量 类型不匹配
指针变量必须先赋值,再使用 例 main( { int i=10; int *p, ·. 2000 整型变量i *p=i, 2001 10 printf"d",*p); 2002 2003 室 2004 ←一指针变量p 2005 例 main( 2006 { int i=10,k; int *p, p=&k; *p=i, printf(d"p);
例 main( ) { int i=10; int *p; *p=i; printf(“%d”,*p); } 危险! 例 main( ) { int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); } 指针变量必须先赋值,再使用. . 2000 2004 2006 2005 整型变量i 10 指针变量p 2001 2002 2003 随机
运算符说明 int a,b,*p; p=&a;b=*p; 1)&和*互为逆运算 2) &和*优先级相同,结合性为右结合。 3)&*p等价于&(*p),其结果就是p 4) *&X等价于*(&X),其结果就是X
运算符说明 int a, b, *p; p=&a; b=*p; 1) &和*互为逆运算 2) &和*优先级相同,结合性为右结合。 3) &*p等价于&(*p),其结果就是p 4) *&x等价于*(&x),其结果就是x
★指针的运算:地址的运算 赋值运算 ·算术运算 (指针变量加(减)一个整数,两个 指针相减) ·关系运算 1、指针的赋值运算:只在同一数据类型间进行 int *pl,*p2,a,s[5]; int*pl=&a;∥指针变量初始化赋值 p2=&a;∥把变量a的地址赋给指针变量p2 pl=p2;∥指针变量p2的值赋给指针变量pl pl=S;∥把数组s的首地址赋给指针变量pl pl=&s[3];/把数组元素s[3]的地址赋给指针变量p1 pI=NULL;∥把空指针NULL赋给指针变量
指针的运算:地址的运算 • 赋值运算 • 算术运算(指针变量加(减)一个整数,两个 指针相减) • 关系运算 1、指针的赋值运算:只在同一数据类型间进行 int *p1,*p2,a,s[5]; int *p1=&a ; //指针变量初始化赋值 p2=&a ; //把变量a的地址赋给指针变量p2 p1=p2 ; //指针变量p2的值赋给指针变量p1 p1=s ; //把数组s的首地址赋给指针变量p1 p1=&s[3] ;//把数组元素s[3]的地址赋给指针变量p1 p1=NULL; //把空指针NULL赋给指针变量
NULL代表整数O的符号常量,在stdio.h文件中定义 指针变量赋值为NULL,表示该指针变量当前未指 向任何变量,值为0。 ★p=NULL与未对p赋值不同 未赋值时,指针变量是任意值,不能使用; 赋NULL值后,则可使用,只是不指向具体的变量 例 int *p ★用途: 必避免指针变量的非法引用 在程序中常作为状态比较 while(p!=NULL)
❖NULL代表整数0的符号常量,在stdio.h文件中定义 ❖指针变量赋值为NULL,表示该指针变量当前未指 向任何变量,值为0。 p=NULL与未对p赋值不同 未赋值时,指针变量是任意值,不能使用; 赋NULL值后,则可使用,只是不指向具体的变量 用途: ❖避免指针变量的非法引用 ❖在程序中常作为状态比较 例 int *p; . while(p!=NULL) { . }