加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的指针,不明白他们是如何得到这个结果的

发布时间:2020-12-16 10:28:14 所属栏目:百科 来源:网络整理
导读:这是代码片段 void F (int a,int *b){ a = 7 ; *b = a ; b = a ; *b = 4 ; printf("%d,%dn",a,*b) ;}int main(){ int m = 3,n = 5; F(m,n) ; printf("%d,m,n) ; return 0;} 回答 4 4 3 7 我看到4 4是如何计算的,我不知道它们是如何得到3 7的(我明白3是如何
这是代码片段

void F (int a,int *b)
{
 a = 7 ;
 *b = a ;
 b = &a ;
 *b = 4 ;
 printf("%d,%dn",a,*b) ;
}
int main()
{
 int m = 3,n = 5;
 F(m,&n) ;
 printf("%d,m,n) ;
 return 0;
}

回答

4 4 
3 7

我看到4 4是如何计算的,我不知道它们是如何得到3 7的(我明白3是如何计算的,它没有改变,因为它没有通过引用传递)

谢谢 !

解决方法

在主要的开始,我们有

m=3   n=5  // int m = 3,n = 5;

然后我们调用F(m,& n),按值传递m,用指针传递n
这样的

m = 3   n = 5
a = 3   b->n   // F(m,&n);

现在,在F()中,我们将7分配给:

m = 3   n = 5
a = 7   b->n     // a = 7

然后我们将(= 7)分配给b指向的内存地址( – > n)

m = 3   n = 7
a = 7   b->n     // *b = a;

接下来我们改变b,所以现在b指向a:

m = 3   n = 7
a = 7   b->a     // b = &a;

然后我们将4分配给b指向的内存地址( – > a)

m = 3   n = 7
a = 4   b->a     // *b = 4;

打印a(= 4)和* b( – > a = 4)

并在函数外打印m(= 3)和n(= 7)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读