C语言中指针p p=&k *p=k 有什么区别啊?

例如这一题
#include <stdio.h>
int k=5;
void f(int *s)
{ s=&k;
*s=k;
}
main( )
{ int m=3;
f(&m);
printf("%d,%d\n", m, k);
}

中间他S=&k *s=k这两个的意思难道不是把K的地址与值赋予S了,而main函数中m不是就传递给了*s吗?那m的值不就等于K了?可是为什么答案却是3,5 而不是5,5
最新回答
你好调皮

2024-10-15 16:01:29

按照以下步骤分析即可
总共三个变量 s k m
第一步,k = 5, s、m不存在
第二步, m = 3,k = 5, m = 3, s 不存在
第三步,传入m的地址,在f函数中用局部变量s承接,m = 3; k = 5; s = &m
第四步,s = &k,m = 3; k = 5; s = &k;
第五步, *s = k = 5; m = 3;k = 5; s = &k;
从第三步到第四步,s从指向m变成了指向k,然后再对s解引用,此时s已经指向了k,更改的也是k的值
所以是3,5
烈艳红唇

2024-10-15 08:19:10

s = &k 这句执行执行后s是k的地址 原来装的是m的地址
*s = k; *s现在就是k 这句相当于k = k.
鲜血染红嫁衣

2024-10-15 13:53:50

把 s = &k; 这一行去掉,就是5,5
s = &m; 是参数传递过去的
s=&k; 马上又重新赋值了 pointer s