★指针变量的初始化 一般形式:[存储类型]数据类型*指针名-初始地址值; 例int1: 赋给指针变量 int *p=&i 变量必须已说明过 类型应一致 int *t&ip=&i Int 1, int q=p 用已初始化指针变量作初值 例main() Int 1; static int *p=&i 不能用auto变量的地址 (×) 去初始化 static型指针
指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值; 赋给指针变量, 不是赋给目标变量 例 int i; int *p=&i; 变量必须已说明过 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值 例 main( ) { int i; static int *p=&i; .............. } () 不能用auto变量的地址 去初始化static型指针
指针变量必须先赋值,再使用 例main( i int 1=10; p 2000 整型变量i 1 printfr-co 2001 10 d,*p) 2002 2003 危险! 2004 指针变量p 2005 例main() 随 2006 i int j-10, k p &k: 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 随机
例指针的概念c Ch9.c 运行结果: maino a:10 f86 整型变量a Int a a:10 Int*pa=&a, &a f86(hex) 87 a=10: pa: f86(hex) f88 指针变量pa &pa: f88(hex) 189 f86 printf("a: %dn", a) f8a printf("*pa: %dn",pa) printf("&a: %x(hex)n", &a) fsb printf("pa: %x(hex)n", pa) f8c printf("&pa: %(hex)n", &pa)
例 指针的概念 main() { int a; int *pa=&a; a=10; printf("a:%d\n",a); printf("*pa:%d\n",*pa); printf("&a:%x(hex) \n",&a); printf("pa:%x(hex) \n",pa); printf("&pa:%x(hex) \n",&pa); } 运行结果: a:10 *pa:10 &a:f86(hex) pa:f86(hex) &pa:f88(hex) …... …... f86 f8a f8c f8b 整型变量 a 10 指针变量pa f87 f88 f89 f86
例输入两个数,并使其从大到小输出C 0h92c mair i int*pl, * p2, *p, a, b scanf("%od, %od", &a, &b) 指针变量pl 2008 pI=&a; p2=&b 2002 指针变量p2 2006 f(ab) 指针变量p 2006 i p=pl; pl=p2; p2=p; 1 2006 整型变量a printf("a=d, b=%odn", a, b) 卜整型变量b printf("max=%d, min=%dn"*pl, * p2); 运行结果:a=5,b=9 max min=5
例 输入两个数,并使其从大到小输出 main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p;} printf("a=%d,b=%d\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); } 运行结果:a=5,b=9 max=9,min=5 …... …... 指针变量p1 指针变量p 2000 2008 2002 2004 2006 指针变量p2 整型变量b 整型变量a 5 2006 9 2008 2006 2008 2006
★指针变量作为函数参数—地址传递 特点:共享内存双向”传递 例将数从大到小输出 swap(int x, int y) (main) 2000 变量a i int temp 2002 变量b temp=X 2004 COPY/2006 (swap) 变量x y=temp 2008 变量y 200A main 变量temp 5 i int a, b scan i"dd",&a,&b); if(a<b)swap(a, b) printf("n%od, %odn", a, b)
指针变量作为函数参数——地址传递 特点:共享内存, “双向”传递 swap(int x,int y) { int temp; temp=x; x=y; y=temp; } main() { int a,b; scanf("%d,%d",&a,&b); if(a<b) swap(a,b); printf("\n%d,%d\n",a,b); } 例 将数从大到小输出 …... …... 2000 2008 200A 2002 2004 2006 5 变量a 变量b (main) 9 变量temp 变量y 变量x (swap) 5 5 95 9 COPY