清华大学出版社 TSINGHUA UNIVERSITY PRESS 例10.1通过指针变量访问整型变量。 mainO) {inta,B; int pointer-1,*pointer-2; a=100;B=10; pointer-l=&a;/*把变量a的地址赋给pointer-1*/ pointer-2=&B;/*把变量B的地址赋给pointer-2*/ printf("%D,%D\n",a,B); printf("%D,%D\n",*pointer-1,*pointer-2);
例10.1通过指针变量访问整型变量。 main() {int a,B; int pointer-1, *pointer-2; a=100;B=10; pointer-1=&a;/*把变量a的地址赋给pointer-1*/ pointer-2=&B; /*把变量B的地址赋给pointer-2*/ printf("%D,%D\n",a,B); printf("%D,%D\n", *pointer-1, *pointer-2); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行结果为: 100,10 100,10 对程序的说明: (1)在开头处虽然定义了两个指针变量pointer-1和 pointer-2,但它们并未指向任何一个整型变量。 只是提供两个指针变量,规定它们可以指向整型 变量。至于指向哪一个整型变量,要在程序语句 中指定。程序第5、6行的作用就是使pointer-1指 向a,pointer-2指向B,见图10.5。此时pointer-1的 值为&a(即a的地址),pointer-.2的值为&B
运行结果为: 100,10 100,10 对程序的说明: (1) 在开头处虽然定义了两个指针变量pointer-1和 pointer-2,但它们并未指向任何一个整型变量。 只是提供两个指针变量,规定它们可以指向整型 变量。至于指向哪一个整型变量,要在程序语句 中指定。程序第5、6行的作用就是使pointer-1指 向a,pointer-2指向B,见图10.5。此时pointer-1的 值为&a(即a的地址),pointer-2的值为&B
清华大学出版社 TSINGHUA UNIVERSITY PRESS pointer_l a &.a pointer_1 pointer_2 &b pointer_2 图10.5
图10.5
清华大学出版社 TSINGHUA UNIVERSITY PRESS (2)最后一行的pointer-1和*pointer-2就是变量a和B。 最后两个printf函数作用是相同的。 (3)程序中有两处出现pointer-l和*pointer-.2,请 区分它们的不同含义。程序第3行的*pointer-1和 *pointer-2表示定义两个指针变量pointer-l、 pointer-2。它们前面的“*”只是表示该变量是指 针变量。程序最后一行printf函数中的*pointer-l 和*pointer-2则代表变量,即pointer-1和pointer-2 所指向的变量。 (4)第5、6行“pointer-1=&a;”和“pointer-2=&B;” 是将a和B的地址分别赋给pointer-.1和pointer-2。 注意不应写成:“*pointer-l=&a;”和“*pointer- 2=&B;”。因为a的地址是赋给指针变量pointer-1
(2) 最后一行的pointer-1和*pointer-2就是变量a和B。 最后两个printf函数作用是相同的。 (3) pointer-1和*pointer-2,请 区分它们的不同含义。程序第3行的*pointer-1和 *pointer-2表示定义两个指针变量pointer-1、 pointer-2。它们前面的“*”只是表示该变量是指 针变量。程序最后一行printf函数中的*pointer-1 和*pointer-2则代表变量,即pointer-1和pointer-2 所指向的变量。 (4) 第5、6行“pointer-1=&a;”和“pointer-2=&B;” 是将a和B的地址分别赋给pointer-1和pointer-2。 注意不应写成:“*pointer-1=&a;”和“*pointer- 2=&B;”。因为a的地址是赋给指针变量pointer-1
清华大学出版社 TSINGHUA UNIVERSITY PRESS 而不是赋给*pointer-.1(即变量a)。请对照图10.5分 析。 下面对“&”和“*”运算符再做些说明: (I)如果已执行了“pointer-1=&a;”语句,若有 &*pointer-1 它的含义是什么?“&”和“*”两个运算符的优先 级别相同,但按自右而左方向结合,因此先进行 *pointer-l的运算,它就是变量a,再执行&运算。 因此,&*pointer-.l与&a相同,即变量a的地址。 如果有pointer-2=&*pointer-l;
而不是赋给*pointer-1(即变量a)。请对照图10.5分 析。 下面对“&”和“*”运算符再做些说明: (1) 如果已执行了“pointer-1=&a;”语句,若有 &*pointer-1 它的含义是什么?“&”和“*”两个运算符的优先 级别相同,但按自右而左方向结合,因此先进行 *pointer-1的运算,它就是变量a,再执行&运算。 因此,&*pointer-1与&a相同,即变量a的地址。 如果有pointer-2=&*pointer-1;