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