第八章指针 doubler, a [20] int 1 register int k 表达式&r、&a[0]、&a[门]是正确的,而&(2*r) &a、&k是非法表示。 单目运算符*是&的逆运算,它的操作数是对象的地址,* 运算的结果是对象本身。单目*称为间访运算符,“间访” 就是通过变量的地址而不是变量名存取(或引用)变量。例 如,如果pc是指向字符变量c的指针,则*&c)和*pc表示同 字符对象c。因而赋值语句 *(&C)a pc a 效果相同,都是将a'存入变量c。 c=a
第八章 指 针 double r, a[20]; int i; register int k; 表达式&r、 &a[0]、 &a[i]是正确的, 而&(2*r)、 &a、&k是非法表示。 单目运算符*是&的逆运算,它的操作数是对象的地址, * 运算的结果是对象本身。 单目*称为间访运算符, “间访” 就是通过变量的地址而不是变量名存取(或引用)变量。例 如, 如果pc是指向字符变量c的指针,则*(&c)和*pc表示同 一字符对象c。因而赋值语句 *(&c)=′a′; *pc=′a′; c=′a′; 效果相同,都是将′a′存入变量c
第八章指针 例8.3取地址运算符 int variable, *point point=&variable
第八章 指 针 例 8.3 取地址运算符。 int variable, *point; point=&variable;
第八章指针 3.指针的使用 例8.4指针的使用。 mal fint a, b, * pl, * p2; a=10:b=20: pI=&a; p2=&b printf("%d t%dn"*pl, p2); 1=&b;p2=&a printf(%d%dn",'pl, p2); 程序运行结果 1020 2010
第八章 指 针 3. 指针的使用 例 8.4 指针的使用。 main( ) {int a, b, *p1, *p2; a=10; b=20; p1=&a; p2=&b; printf("%d\t%d\n", *p1, *p2); p1=&b; p2=&a; printf("%d\t%d\n", *p1, *p2); } 程序运行结果: 10 20 20 10
第八章指针 程序说明: (1)在两个 printf函数调用语句中的*是指针运算符,这 单目运算符的运算对象应该是指针或地址,它的作用是得 到指针指向变量的值。 (2)在第一个prnt函数调用时,可以偎设内存的分配如 图8.2所示。 2000200120022003 2020202120222023… 10 20 2000 2002 变量a变量b 指针p!指针p2 图82内存分配表
第八章 指 针 程序说明: (1) 在两个printf函数调用语句中的*是指针运算符,这一 单目运算符的运算对象应该是指针或地址, 它的作用是得 到指针指向变量的值。 (2) 在第一个printf函数调用时, 可以假设内存的分配如 图8.2所示。 图 8.2 内存分配表
第八章指针 (3)在第二个prnt函数调用时,内存的分配将如图83所示。 2000200120022003…,2020202120222023… 10 20 ●t 2002 2000 变量a变量b 指针p1指针p2 图8.3内存分配表
第八章 指 针 (3) 在第二个printf函数调用时,内存的分配将如图8.3所示。 图 8.3 内存分配表