这段代码有没有问题,不应该是解引用再赋值吗

img

没有问题,可以直接赋值的

首先p指向m,q指向n;
然后r=p,r指向p,p指向m,所以r指向m
p=q,p指向q,q指向n,所以p指向n
q=r,q指向r,r指向m,所以,q指向m
所以输出结果是:m,n,n,m,即1,2,2,1
答案是B

这段代码可以正常运行,它是将变量之间进行赋值,不是将一个确切的值赋值,不需要先解引用

#include <stdio.h>
int main(){
    int m=1,n=2,*p=&m,*q=&n,*r;
    r=p;
    p=q;
    q=r;
    printf("%d,%d,%d,%d\n",m,n,*p,*q);
    return 0;
}

如有帮助,请采纳,谢谢~

用r来当中间变量交换p,q的指针。所以交换完了p指向了n;q指向了m。
每条语句都合理,不知道那一条语句有疑惑?
另外,下次请不要贴图,贴代码。对想帮你的人要有起码的尊重。