帮帮我这程序是怎么分析?想得我头疼!~

来源:百度知道 编辑:UC知道 时间:2024/09/20 07:28:45
main()
{int k=2,m=4,n=6;
int *pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf("*p=%d,n=%d\n",*p,n);}
那位大哥帮我分析下,我始终没把这个指针的含义搞清楚我觉得好复杂,头都想疼了!~教教我吧!~谢谢!~
特别是这个语句*(p=&n)=*pk*(*pm); 是什么含义?

你好,

指针是这样的,

指针代表的是内层中的一个地址,pk是一个指针,所以它的值是内存中的一个地址,*pk表示的是:内存中地址为pk的存储单元里所存的数值。
&的意思是,取一个变量的地址,所以:
int *pk=&k的意思就是,把存储k的内层单元的地址赋值给指针pk,这样的话,*p的值就会是2。同理 *pm的值是4.

*(p=&n)=*pk*(*pm);
这一句,首先应该知道*(p=&n)其实就是n , *pk其实就是k, *pm其实就是m,中间的*号是一个乘号。
所以这句可以理解为: n=k*m。

所以,最后n的值就是2*4=8了,*p指示的是n,所以*p的值也是8.

呵呵,懂了么?还有什么不懂的就留言,我会一直关注你这个问题的,有问必答的哦~
祝你早日解决问题~!

你看不懂的也只有这一句吧?都是一级整数指针,没什么难的。

*(p = &n) = *pk*(*pm);等价于

p = &n;
*p = (*pk)*(*pm);

如果还不明白,那我告诉你两个括号中间的*是乘号,这样就明白了吧?
打印出来的结果应该是两个等式都是8.

从三行开始说吧。
int *pk=&k,*pm=&m,*p;
程序定义了三个整形的指针,pk,pm,p,并对前两个进行了初始化,使pk=k在内存中的地址,pm=m在内存中的地址。这样以来,*pk=2,*pm=4
第四行是可以改成这个样子。
p=&n;//把n在内存中的地址给了P。所以n=6,*p也等于6.
*p=(*pk) * (*pm);//把2×4的结果存入n.