作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/09 18:59:33
*(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);
}
上面是C语言源程序
现在*pk=&k即为*pk代表的是k的地址
*pm=&m代表的是m变量的地址
在运算*pk*(*pm)时,不就是k和m的地址在做乘法吗?
书上写的指针变量定义应该是:pk=&k,pm=&m,这样*pk=k,*pm=m,这个我知道
所以不明白为什么*pk=2;*pm=4;
不要把指针声明时的 * 跟使用时的 * 混淆了.
*pk = &k; 这行是在声明的同时初始化赋值,等同 int *pk = &k.这时候的 * 意思是 pk 是指向前面指定数据类型的一个指针,整句解读为声明一个整型指针 pk,其值为 &k 就是 k 的地址.
而声明过后,使用该指针的时候,如 *pk * (*pm)中,pk 和 pm 前面的 * 意思是取指针 pk 所指向的内存空间的值.在你的代码中, (*pk) 的使用等同使用 k , 因为 pk 的值是 k 的地址.
如果指针在声明过之后再改变它的值,直接 p = &k 这样赋值.如:int *p;
p = &k;这时候不能使用 *p = &k.
仅有在声明的同时赋值,你才会看到 int *p = &k 这样的带着 * 给指针赋值的写法.
话说,正因为如此,究竟是写成 int *p = &k 还是 int* p = &k 存在一些小争议.因为在声明中或者强制类型转换中,其实可以将 (int *) 看成表达数据类型.就是说这时候 * 其实不是对 p 的操作,而是跟 int 一起,表示 p 是整型变量的指针.