
★指针与指针变量 冬指针:一个变量的地址 冬指针变量:专门存放变量地址的变量叫~ 指针 2000 整型变量i 2001 10 变量的地址 变量的内容 2002 2003 2004 变量i pointer 0005 指针变量 变量地址(指针) 指向 地址存入 变量 指针变量 变量值
. . 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 指针与指针变量 ❖指针:一个变量的地址 ❖指针变量:专门存放变量地址的变量叫~ 2000 指针 指针变量 变量的地址 变量的内容 指针变量 变量 变量地址(指针) 变量值 指向 地址存入 指针变量

★&与*运算符 含义:取变量盒义:取指针所指向变量的内容 单目运算暈养题算符李为逆途章 1 pointer *i pointer 优先级:必理熊先级:2 10 结合性:自 L上人L &i pointer 2000 1 2000 整型变量i 2001 10 i pointer =&i=&(*i pointer) 2002 1 *i pointer *(&i) 2003 2004 一变量i pointer 2005 - 2000 指针变量 2006 i pointer 指针变量,它的内容是地址量 *i pointer- 指针的目标变量,它的内容是数据 &i pointer-指针变量占用内存的地址
&与*运算符 ❖含义 含义: 取变量的地址 单目运算符 优先级: 2 结合性:自右向左 含义: 取指针所指向变量的内容 单目运算符 优先级: 2 结合性:自右向左 ❖两者关系:互为逆运算 ❖理解 . . 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 指针变量 i_pointer-指针变量,它的内容是地址量 *i_pointer-指针的目标变量,它的内容是数据 &i_pointer-指针变量占用内存的地址 2000 10 i_pointer *i_pointer &i_pointer i i_pointer &i &(*i_pointer) i *i_pointer *(&i) i_pointer = &i = &(*i_pointer) i = *i_pointer = *(&i)

例 k=i; 一直接访问 k=*i pointer; 间接访问 . 2000 整型变量i 2001 10 2002 ←一整型变量k 2003 2004 ←一变量i pointer 2005 2000 指针变量 2006
指针变量 . . 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 整型变量k 例 k=i; -直接访问 k=*i_pointer; -间接访问 10 例 k=i; k=*i_pointer;

§7.2指针变量 指针变量与其所指向的变量之间的关系 i pointer 变量i i*i pointer 2000 3 &ii pointer *i pointer i=3,◆*i pointer=-3 ★指针变量的定义 冬一般形式: [存储类型] 数据类型 指针名; int *pl*p2. 铸示定义指针变量 标识符 指计变量sta撞d c瓶是*naMe:滋算苻 型 注意: 1、int*pl,*p2,与int*pl,p2; 2、指针变量名是pl,p2,不是*pl,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值
§7.2 指针变量 指针变量与其所指向的变量之间的关系 指针变量的定义 ❖一般形式: [存储类型] 数据类型 *指针名; 3 变量i 2000 i_pointer *i_pointer i *i_pointer &i i_pointer i=3; *i_pointer=3 3 变量i 2000 i_pointer *i_pointer i *i_pointer &i i_pointer i=3; *i_pointer=3 指针变量本身的存储类型 指针的目标变量的数据类型合法标识符 表示定义指针变量 不是‘*’运算符 例 int *p1,*p2; float *q ; static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值

★指针变量的初始化 一般形式:[存储类型]数据类型*指针名=初始地址值; 例 int i; 赋给指针变量 int *p=&i; 变量必须已说明过 类型应一致 例 int i; 例 int *n&p=&i; int i;int *q=p 用已初始化指针变量作初值 例 main( { int i; static int *p=&i; 不能用auto变量的地址 (X) 去初始化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( { int i=10; int *p 2000 整型变量i *p=i; 2001 10 printf"%d,*p); 2002 2003 危 2004 ←一指针变量p 2005 随机冬 例 main( 2006 N 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 随机

交换两个变量的值 a b b 200←→ 100 100 [&a]→>[&b] q a=100;b=200: int a,b,t; printf("前:a=%db=%dn",a,b); int *p,*q t=a;a=b;b=t; p=&a;q=&b; printf("后:a=%db=%dn",a,b); a=100;b=200; printf"前:a=%db=%dn",a,b): a时108 b=288 a-180h-288 t=*p;*p=*q;*q=t; 后:a-28b-108 后:a=288b18 printf("后:a=%db=%dn",a,b)i
交换两个变量的值 100 200 a b t 100 200 100 100 200 a b p q &a &b a=100;b=200; printf("前:a=%d b=%d\n",a,b); t=a; a=b; b=t; printf("后:a=%d b=%d\n",a,b); int a,b,t; int *p,*q; p=&a;q=&b; a=100;b=200; printf("前:a=%d b=%d\n",a,b); t=*p;*p=*q;*q=t; printf("后:a=%d b=%d\n",a,b);

例输入两个数,并使其从大到小输出 mainO) int *pl,*p2,*p,a,b; scanf("%d,%d",&a,&b); 2000 指针变量pl 2008 pl=&a;p2=&b; 2002 2006 ←一指针变量p2 if(a<b) 2004 一指针变量p 2006 p=pl;pl=p2;p2=p;) 2006 ←一 整型变量a printf("a-%d,b-%d n",a,b); 2008 5 整型变量b printf("max-%d,min-%d n",*pl,*p2); 9 运行结果:a=5,b=9 max=9,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

§7.3指针与数组 ★指向数组元素的指针变量 array[0] 例int array[10] array[1] int *p, array[2】 p=&array[0]; /台p=array, array[3 或int*p-&carray[O] 或int*p=aray; array[9 整型指针p &array 0 数组名是表示数组首地址的地址常量
§7.3 指针与数组 指向数组元素的指针变量 例 int array[10]; int *p; p=&array[0]; // p=array; 或 int *p=&array[0]; 或 int *p=array; array[0] array[1] array[2] array[3] array[9] . 整型指针p &array[0] p 数组名是表示数组首地址的地址常量

★数组元素表示方法 0 变址运算符 a[i叮台*(a+i) 地址 元素 地址 元素 a[0] a[0] *a p a[0] *p p[o] a+l a[1] a[1] *(a+1) p+1 a1] *(p+1) p[1叮 a+2 a2] a[2] *(a+2) p+2 a2] *(p+2) p[2] a3] a[3] a+9 a[9] a[9]*(a+9) p+9 a[9] *(p+9) p[9] 下标法 指针法 ai]→p[i]台*(p+i)台*(a+i)
数组元素表示方法 a[0] a[1] a[2] a[3] a[9] . a a+9 a+1 a+2 地址 元素 下标法 a[0] a[1] a[2] a[9] a[0] a[1] a[2] a[3] a[9] . p p+9 p+1 p+2 地址 元素 指针法 *p *(p+1) *(p+2) *(p+9) [] 变址运算符 a[i] *(a+i) a[i] p[i] *(p+i) *(a+i) *a *(a+1) *(a+2) *(a+9) p[0] p[1] p[2] p[9]