作业帮 > 综合 > 作业

下面这个程序的运行结果为什么是8?*(p=&n)=*pk*(*pm);这个地方又如何理解

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/10 19:29:01
下面这个程序的运行结果为什么是8?*(p=&n)=*pk*(*pm);这个地方又如何理解
#include
main()
{int k=2,m=4,n=6,*pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf("%d\n",n);
}
下面这个程序的运行结果为什么是8?*(p=&n)=*pk*(*pm);这个地方又如何理解
*(p=&n)=*pk*(*pm); 可以拆成好几个部分:
1) *pk ,这里 pk 是指向变量 k 的指针,因此 *pk 是取出变量 k 的值,也就是 *pk = 2
注意这里的 “*” 值不是乘法符号,而是指针运算符,并且优先级比作为乘法符号的"*"优先级高.
2) (*pm) ,这里 pk 是指向变量 m 的指针,因此 *pm 是取出变量 m 的值,也就是 *pm = 4
同样这里 “*” 也是指针运算符.
3) *pk * (*pm); 这里中间 “*” 是乘法运算符.我们已经知道 *pk=2,*pm=4,因此这语句相当于:
*pk * (*pm) = 2 * 4 = 8
4) (p=&n) ,这里的 "&" 是取地址运算符,取出的是变量 n 的地址;
取出 n 的地址后,又赋值给指针p;
因此,这里 p 指向了 n 的地址
5) *(p=&n) ,我们知道 (p=&n) 的运算结果是指针 p,并且 p 是指向变量 n 的.
*(p=&n)
= *(p) ,p 指向 n
= n .
6)整个语句 *(p=&n)=*pk*(*pm) ,
左边是:n
右边是:8
合的起来就是:n = 8