为什么指针*p是x的值?

img

我认为在主程序中x把地址赋予了指针P,那么指针p的值应该是X的地址而不是X的值

首先了解fun函数的作用,fun的作用是交换地址,而不是交换值
其次int p = &x 表示p为&x,也就是p为x的地址,p表示x的值

img


接着第一次调用fun是传值调用,并不会改变x,y对应的地址,fun改变的只是x,y副本的地址
所以第一次输出35

img


接着是第二次fun函数调用,这次是指针传递,x,y的地址确实被改变,但是值得注意的是虽然x,y的地址交换了但是指针指向不变,也就是所p在x,y的地址交换后仍指向值为3的地址,q同理
所以第二次printf输出35
回答不易,有用请采纳下🤠

int p.是指p是一个指向整型的指针,它的类型是int型.。
&x的结果是一个指针,是x的类型 即int 加一个*型的类型,即int .
p=&x.也就是相当于 int
p=&x;
*p也就是等于 x.


p的值是x的地址
*p 这里的*是运算符,可以理解为取所存地址上的值

定义时: p的是表示该变量的类型是指针,而p中存的则是所指元素的地址
访问时: p返回地址,*则让程序进一步反回了该地址所代表的元素
(望采纳,谢谢)

p 和 *p 是不同的
指针p的值是x的地址
在p前面加*号是获取p指针指向的地址中的值(也就是x的值).

要输出地址用%p,输出int用%d