下面这个程序的运行结果为什么是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);
}
#include
main()
{int k=2,m=4,n=6,*pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf("%d\n",n);
}
*(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
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
4.写出下面程序运行的结果.main ( ){ int k=1,n=263 ;
写出下面程序的运行结果,
1、下面程序段的运行结果是 .int n=0; while (n++
下面程序的运行结果是: char c[]="\t\v\\\0will\n" printf("%d",strlen);
求大神解释,为什么程序运行出来是这个结果,如下
下面程序段的运行结果是( ).char *p="abcdefgh"; p+=3; printf("%d\n",strle
写出下面程序运行的结果.main ( ) { int i,b,k=0 ; for (i=1; i
求以下程序的运行结果main(){int i,n=0;for(i=1;i
matlab程序中为什么下面这个式子运行不下去:
matlab问题.为什么下面这个程序无法运行?
M、N两点间的距离是10CM,有一点P,满足PM+PN=13cm.那么下面结论正确的是
M、N两点的距离是20厘米,有一点P,如果PM+PN=30厘米,那么下面结论正确的是( )