C语言中指针的理解使用

    最近刚接触C语言,对指针的使用不是很了解,希望各位大神不吝赐教

程序案例:

http://img.mukewang.com/575771120001a80004160211.jpg

问题:

程序第5行中,scanf()输入的是一个整型数,但是pvalue是一个指针,存储了变量value的地址,*pvalue的值是10,那么问题来了pvalue是怎么存储%d输入的整数呢?我该如何理解scanf("%d",pvalue)呢?请大神帮忙解答一下

       

青春的名字叫奋斗
浏览 1609回答 3
3回答

onemoo

不是“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后面所有的参数都应是指针类型的原因。这些解释看不懂的话,看分割线以上的就好了。

乱舞的旋律

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

什么什么青年欢乐多

简单地说,由于pvalue=&value;因此scanf("%d",pvalue);相当于scanf("%d",&value);
打开App,查看更多内容
随时随地看视频慕课网APP