指针变量必须先赋值,再使用 例main() int i=10 int x 2000 整型变量i 2001 10 printi(%d”,D;2002 2003 2004 危险! 指针变量p 2005 随机 例main() 2006 i int i=10, k nt p p=&ks printf( (“%d”,2p)
例 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*p=0; p指向地址为0的单元, 系统保证该单元不作它用 # tdefine NUll0表示指针变量值没有意义 int“p=NULL: p=NUL与未对p赋值不同 用途: ◆避免指针变量的非法引用
零指针与空类型指针 ❖零指针:(空指针) ⚫定义:指针变量值为零 ⚫表示: int *p=0; p指向地址为0的单元, 系统保证该单元不作它用 #define NULL 0 表示指针变量值没有意义 int *p=NULL: ⚫p=NULL与未对p赋值不同 ⚫用途: ◆避免指针变量的非法引用
例:指针与变量 ●● 运行结果: f86 整型变量a a:10 f87 10 pa:10 f88 卜指针变量pa &a:f86 maino f89 86 pa: f86 Int a, f8 int*pa=&a; fsb 10 f8c printf(" (a: od n",a) pI rIn pa:od\n",*pa printf(" &a: %oxn", &a); printf( pa: %xIn",pa);
例:指针与变量 main() { int a; int *pa=&a; a=10; printf("a:%d \n",a); printf("*pa:%d \n",*pa); printf("&a:%x \n",&a); printf("pa:%x \n",pa); } 运行结果: a:10 *pa:10 &a:f86 pa:f86 …... …... f86 f8a f8c f8b 整型变量 a 10 指针变量pa f87 f88 f89 f86
例:交换变量a、b里面的值 直接访问ⅴS间接访问 include <stdio.h> #include <stdio.h>> void maino void maino i int a=5, b=8: int *pa =&a, pb=&b Int t printf(a=o/od b=o/od n",a, b); printf(a=o/od b=%/od n", a, b) a pa b: pa= pb b=t pb=t printf(a=O/od b=o/ n",a, b) print(aod b%od\n",a, b)
例:交换变量a、b里面的值 直接访问 VS 间接访问
读程序,写出运行结果 void main( int a, b,c, 输入:23 int pa,pb,pC, pa=&a, pb=&b, pc=&c, scanf (%/od%/od", pa, pb) printf("a=%od, b=%od n",pa, pb); a=2b=3 c=a+b printf("c=o/od n",*pc); 5 pc=a+" printf ("c=o/od n",c) c=5 pa**pb; pinf("c=°odn",C); C=++ pa+ (pb)++; printf("C=O/od n",C); C--(pa)+++*pb; printf("c =%/od n", C); printf(a=/od, b=O/odn", a, b);a4, b=4 相当于(米*pa)+)+*pb
读程序,写出运行结果 输入:2 3 a=2,b=3 c=5 c=5 c=6 c=6 c=7 a=4,b=4 相当于((*pa)++)+*pb