(3)使用指针应注意的问题: ①作为指针要访问的数据一定要在相应的指针之 前定义。例如: char *p-&c; char c; 是错误的,因为编译char*p-&c时,变量c还 未分配存储单元。 ② 指针必须存放地址量。例如: inta,*p,p=a;是错误的,因为a不是地址量。 ③ 未指向数据的指针不能引用。例如: int *p;*p-5; 是错误的,因为指针p未指向某个数据,其值 未定。 BACK
(3)使用指针应注意的问题: ① 作为指针要访问的数据一定要在相应的指针之 前定义。例如: char *p=&c; char c; 是错误的,因为编译char *p=&c时,变量c还 未分配存储单元。 ② 指针必须存放地址量。例如: int a,*p; p=a; 是错误的,因为a不是地址量。 ③ 未指向数据的指针不能引用。例如: int *p; *p=5; 是错误的,因为指针p未指向某个数据,其值 未定
◆3、指针变量的算术运算 含义:对于地址的运算,只能进行整型数 据的加、减运算。 规则:指针变量p士n表示将指针指向的当 前位置向前或向后移动n个存储单元。指 针变量的算术运算结果是改变指针的方 向。 指针变量算术运算的过程: p-p+n;p=p-n; BACK
3、指针变量的算术运算 含义:对于地址的运算,只能进行整型数 据的加、减运算。 规则:指针变量p±n表示将指针指向的当 前位置向前或向后移动n个存储单元。指 针变量的算术运算结果是改变指针的方 向。 指针变量算术运算的过程: p=p+n; p=p-n;
问题6.1用&和*运算符编写程序,说明指针变量的使用。 【程序代码】 mainO { int x=10,a,*p; long y=100000,b,*q: p=&x, a=*p; q=&y; b=*q, printf"a-=%dn”,a): printf "b=%ldn”,b); printf“&x=ox,oxn”,&Xp) printf(“&y=%x,%xn”,&y,q: BACK
问题6.1 用&和*运算符编写程序,说明指针变量的使用。 【程序代码】 main() { int x=10, a, *p; long y=100000, b, *q; p=&x; a=*p; q=&y; b=*q; printf(“a=%d\n”,a); printf(“b=%ld\n”,b); printf(“&x=%x,%x\n”,&x,p); printf(“&y=%x,%x\n”,&y,q); }
【说明】 l、itp:定义了一个指针变量p,其中p是变量名,“*”表示p是指针变量,是区别 般简单变量的符号。 2、指针变量定义时所存放的地址是随机的。与其它变量一样,指针变量也可以在定义 时进行初始化,还可用赋值语句赋值。例如,还可将以下语句: int x=10,a,*p: long y=100000,b.*q: p=&x; q=&y: 改写为: int x=10,a,*p=&x; long y=100000,b,*q=&y; 3、语句printf(&x-9ox.9ox n”,&xp):表示输出变量x的值,指针p的值。 4、本题中通过“&”和“*”两个运算符,使a问接得到x的值,使b问接得到y的值。 运行结果:a=10 b=100000 &=12ff7c,12ff7水k &y=12f70,12ff70 BACK
问题6.2 利用指针变量访问变量x和y。 【程序代码】 main() int x=100,*px; float y-56,*py; px-&x; py=&y; printf(%d%fn”,x,y) /*直接访问*/ printf(%d%fn”,*px,*py),/*间接访问*/ 【说明】 第一个printf的执行是根据变量x和y与地址对应关系,直 接将其值输出;第二个printf的执行是根据px和py内存放的 地址值,找到变量x和y内存放的数据,然后将其输出。 运行结果:100 56.000000 100 56.000000 BACK
问题6.2 利用指针变量访问变量x和y。 【程序代码】 main() { int x=100,*px; float y=56,*py; px=&x; py=&y; printf(“%d %f\n”,x,y); /*直接访问*/ printf(“%d %f\n”,*px,*py); /*间接访问*/ } 【说明】 第一个printf的执行是根据变量x和y与地址对应关系,直 接将其值输出;第二个printf的执行是根据px和py内存放的 地址值,找到变量x和y内存放的数据,然后将其输出。 运行结果:100 56.000000 100 56.000000