scanf后面的参数,为什么要加上取地址的符号? 一般学习C语言学到第二天的时候,很多同学都会有这样的疑问。 这个问题等你学完了指针,应该就会很清晰。 scanf的作用是从标准输入缓冲区获得一个数据,放在对应的变量里面,假设我们获取的是一个整数。 如果不取地址,写法是这样的:
scanf("%d", num);num在这个地方叫做实参。 scanf的定义在C库中,而且还涉及可变参数,我们把它简化一下,假设函数的定义就是这样:
int scanf(char *f, int n) { // ... }这个地方的n叫做形参。 在内存里面,实参占 4 个字节,形参也占 4 个字节。 函数体里面要做的,就是从标准输入读取一个整数,放在 n 中。 那么问题来了,数据确实被放到了 n 里面,但是 num 没有任何变化,回到函数调用的地方,num 并没有变成我们想要的数据。 如果改成取地址,实参还是 num,但是形参变成了 num 的地址,指针 n 指向 num,在 scanf 函数里面,可以通过地址把获取到的数据放到 num 中。
回到函数调用的地方,num确实被修改了。 所以我们使用 scanf 的使用,经常会见到取地址的符号,就是希望在函数内部修改实参的值。 最后,还得强调一下,并不是所有使用 scanf 的地方都要加上取地址符号,比如数组,数组名本身就是地址,也就没有必要再对他做取地址的操作。
审核编辑:黄飞
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
参数
+关注
关注
11文章
1829浏览量
32195 -
C语言
+关注
关注
180文章
7604浏览量
136691 -
函数
+关注
关注
3文章
4327浏览量
62569
原文标题:scanf的参数为什么要取地址?
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言scanf函数问题
如图所示,scanf()函数格式串中如果没有逗号(%d%d%d),则显示结果正常;但是加了逗号之后(%d,%d,%d)结果就不正常了,请问各位这是怎么回事?谢谢
发表于 08-07 13:09
scanf函数简单问题讨论
);return 0;}但要注意:这个函数自动把你最后敲的回车转换为字符'\0'。如果你的输入超过了数组的大小,那么就会产生错误。3.scanf()函数的参数输入类型不匹配问题这是我在
发表于 12-21 16:55
scanf函数简单问题讨论和分享
);return 0;}但要注意:这个函数自动把你最后敲的回车转换为字符'\0'。如果你的输入超过了数组的大小,那么就会产生错误。3.scanf()函数的参数输入类型不匹配问题这是我在
发表于 12-29 18:26
C语言入门教程-Scanf
Scanf
使用scanf函数可以从标准输入设备接受输入。对我们而言,标准输入设备一般就是键盘。虽然scanf函数可以做许多事情,但是除了
发表于 07-29 10:44
•1074次阅读
printf和scanf什么意思
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。scanf()是C语言中的一个输入函数。与printf函数
发表于 11-09 18:02
•3.8w次阅读
实现重定向printf()和scanf() 函数案例分析
要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中。重定向是指用户可以自己重写C 的库函数
发表于 06-23 08:26
•9196次阅读
C语言使用scanf函数的注意事项
scanf函数中的格式控制后面应当是变量地址,而不是变量名。
* 如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入这些字符相同的字符。
scanf在C语言中的作用
至关重要。 scanf函数的基本语法是: ```c scanf("格式控制字符串", 变量2, ...); ``` 其中,"格式控制字符串"指定了输入数据的类型和格式,变量1、变量2等是待存储输入数据的变量
c语言scanf的正确使用及技巧
函数的正确使用及一些技巧。 scanf函数的基本用法 scanf函数是通过格式控制字符串来确定输入变量的类型和格式的。它的基本使用方法是,首
评论