0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为何scanf函数的参数需要取地址?

学益得智能硬件 来源:学益得智能硬件 2024-04-26 17:38 次阅读

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

    文章

    1690

    浏览量

    31923
  • C语言
    +关注

    关注

    180

    文章

    7575

    浏览量

    134602
  • 函数
    +关注

    关注

    3

    文章

    4245

    浏览量

    62032

原文标题:scanf的参数为什么要取地址?

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    四种获取内核函数地址的方法

    在内核调试中,经常需要知道某个函数地址,或者根据函数地址找到对应的函数,从而进行更深一步的de
    的头像 发表于 11-17 16:58 1050次阅读
    四种获取内核<b class='flag-5'>函数</b><b class='flag-5'>地址</b>的方法

    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

    stm32编程中如何实现printf函数scanf函数

    stm32编程中如何实现printf函数scanf函数
    发表于 12-01 07:45

    如何去实现printf函数scanf函数重定向呢

    如何去实现printf函数重定向呢?如何去实现scanf函数重定向呢?
    发表于 12-14 06:42

    C语言入门教程-Scanf

    Scanf 使用scanf函数可以从标准输入设备接受输入。对我们而言,标准输入设备一般就是键盘。虽然scanf函数可以做许多事情,但是除了
    发表于 07-29 10:44 1041次阅读

    matlab函数命令代码

    本内容介绍了matlab函数。在matlab中有四个函数具体:Matlab函数有:
    发表于 12-20 14:41 4909次阅读

    C语言scanf函数详解

    C语言scanf函数详细解释
    发表于 05-15 09:20 6次下载

    printf和scanf什么意思

    printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。scanf()是C语言中的一个输入函数。与printf函数
    发表于 11-09 18:02 3.8w次阅读
    printf和<b class='flag-5'>scanf</b>什么意思

    实现重定向printf()和scanf() 函数案例分析

    要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中。重定向是指用户可以自己重写C 的库函数
    发表于 06-23 08:26 8980次阅读
    实现重定向printf()和<b class='flag-5'>scanf</b>() <b class='flag-5'>函数</b>案例分析

    C++:详谈地址操作符重载

    址操作符重载函数返回值为该类型的指针,无参数
    的头像 发表于 06-29 11:59 3391次阅读
    C++:详谈<b class='flag-5'>取</b><b class='flag-5'>地址</b>操作符重载

    C语言使用scanf函数的注意事项

    scanf函数中的格式控制后面应当是变量地址,而不是变量名。 * 如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入这些字符相同的字符。
    的头像 发表于 03-09 11:01 567次阅读

    scanf在C语言中的作用

    至关重要。 scanf函数的基本语法是: ```c scanf("格式控制字符串", 变量2, ...); ``` 其中,"格式控制字符串"指定了输入数据的类型和格式,变量1、变量2等是待存储输入数据的变量
    的头像 发表于 11-23 14:13 1043次阅读

    c语言scanf的正确使用及技巧

    函数的正确使用及一些技巧。 scanf函数的基本用法 scanf函数是通过格式控制字符串来确定输入变量的类型和格式的。它的基本使用方法是,首
    的头像 发表于 11-24 10:04 2918次阅读