为了账号安全,请及时绑定邮箱和手机立即绑定

C语言中指针的理解使用

C语言中指针的理解使用

C C# C++
青春的名字叫奋斗 2016-06-08 09:17:50
    最近刚接触C语言,对指针的使用不是很了解,希望各位大神不吝赐教 程序案例:问题:程序第5行中,scanf()输入的是一个整型数,但是pvalue是一个指针,存储了变量value的地址,*pvalue的值是10,那么问题来了pvalue是怎么存储%d输入的整数呢?我该如何理解scanf("%d",pvalue)呢?请大神帮忙解答一下       
查看完整描述

3 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

不是“pvalue是怎么存储%d输入的整数呢”,而是scanf会将输入的数存入传入的指针所指的变量中。 也就是:pvalue是指向value的,scanf通过pvalue访问了value,并向其中存入了输入的整数。

scanf的第一个参数是格式化指示,你必须按照指示的要求来输入。 scanf将接受的输入,按照指示解释成相应的类型,并将其依次存入后续参数所指的位置中。后面的参数都会是指针类型。 scanf函数的行为就是这样,你使用时记住即可。


===较真的分割线===

至于为什么那些参数必须是指针?直接传入value不行?  如果你想知道的话,那是因为函数调用时,参数是以拷贝的方式传入的,传入函数中的只是一个“副本”。 就是说如果你传入的是value,那么函数中得到的value只是函数外value的一个“副本”,它们是值相同的两个value。 所以scanf把值存入value,这并不会改变函数外面value的值,scanf没办法改变外部value的值。

为此我们改用传地址的方式,也就是将指向value的指针传入scanf。 诚然scanf中得到的那个指针仍然是一个副本,但对scanf要做的事没有影响,副本指针仍是指向外部value的,可以通过这个副本指针来改变外部value的值。 这就是为什么scanf后面所有的参数都应是指针类型的原因。

这些解释看不懂的话,看分割线以上的就好了。

查看完整回答
1 反对 回复 2016-06-08
?
乱舞的旋律

TA贡献105条经验 获得超38个赞



scanf("%d",地址);
scanf找到地址把值存到那个地址里的,
所以你经常看到 scanf("%d %d %d",&a,&b,&c)之类的
&a就是找到a的地址  然后你输入的 整数值就会存入到那个地址里
就这样理解    pvalue 就是value的地址  所以不需要&(取地址符)


查看完整回答
反对 回复 2016-06-08
?
什么什么青年欢乐多

TA贡献7条经验 获得超10个赞

简单地说,由于pvalue=&value;因此scanf("%d",pvalue);相当于scanf("%d",&value);

查看完整回答
反对 回复 2016-06-08
  • 3 回答
  • 5 关注
  • 1556 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信