C语言问覅

来源:百度知道 编辑:UC知道 时间:2024/07/08 12:48:13
main()
{int k=2,m=4,n=6,*pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf("%d",n);
}
这道题怎么计算啊 怎么看这道题的运算过程 我知道结果 只要说运算过程就可以

p=&n表示把n的地址赋给p,然后加*,算式左边就是n的值
右边是pk地址的值乘以pm地址的值,pk指向k等于2,pm指向m等于4
所以n就等于2乘以4等于8

面对这种题,我个人认为最好就(按运算符的优先级)分解一下式子

1.*(p=&n)这个应该比较简单..就是*p..而p是指向n的,所以是6

2.*pk*(*pm)这个你要分清*是乘号还是指针运算符,

应该中间是乘,左右是指针运算符吧..可以算得:2*4=8

3.最后有个赋值的过程,n=8,,

4.输出为:8

k=2,m=4,n=6,*pk=&k,*pm=&m,*p;
pk指向k(pk的值为k的地址序号)
pm指向m
p是个指针但未进行赋值

*(p=&n)=*pk*(*pm);
等号右边:
pk的值即k的地址,*pk即序号为pk的地址上储存的数,即k的值2
pm的值即m的地址,*pm即序号为pm的地址上储存的数,即m的值4
中间的那个*显然为乘号,pm为一级指针,所以不会有2个**,况且2个**之间已经被()分割开来了,()优先级别最大,*pk,*pm都为实数,显然为乘号
所以等号右边的数值为常数8
等号左边:
()优先级最高,电脑第一步执行p=&n,即把n的地址序号赋给p(p为储存常数n的储存空间的序号),
*(p=&n),*号的意思就是再地址序号为p的储存空间里的值。
而右边为8,即是把8放到地址序号为p的储存空间,而地址序号为p的储存空间就是储存n的空间,所以n被令为8

综上,*(p=&n)=*pk*(*pm);这运算式作用就是把地址序号为pk的储存空间里的数与地址序号为pk的储存空间里的数相乘,再把其乘积的值赋给地址序号为p的储存空间里.
所以n的值为8