下面这个程序的运行结果为什么是8?*(p=&n)=*pk*(*pm);这个地方又如何理解#includemain(){int k=2,m=4,n=6,*pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);}

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 03:57:20
下面这个程序的运行结果为什么是8?*(p=&n)=*pk*(*pm);这个地方又如何理解#includemain(){int k=2,m=4,n=6,*pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(

下面这个程序的运行结果为什么是8?*(p=&n)=*pk*(*pm);这个地方又如何理解#includemain(){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);这个地方又如何理解
#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);这个地方又如何理解#includemain(){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

大致看了下,个人感觉啊:指针本质为内存的编号,第二行的连续几次取地址里操作无形中吧一个int型变成一个指针变量了,所以结果都是一个地址里存放的东西了应该是随机的吧