关于scanf()为什么要取&

本文探讨了在C语言中使用scanf函数时,为何需要在大多数参数前加上&。介绍了数据如何在内存中存储及写入,强调了字符数组与&的关系。同时,文章还讲解了空格在scanf函数中的特殊用法,如何利用空格来忽略输入的空格,并指出不同数据类型在遇到空格时的行为差异。
部署运行你感兴趣的模型镜像

数据在scanf中是怎样存储并写入内存的?

&是地址符(指针),在scanf函数中,读取的数据为用户输入的字符组成的数组。

除了参数本身为字符组成的数组的情况下不需要在参数前加说明&,其余情况均需要使用&为输入类容分配字符串数组空间。

例如:
char a[10];

scanf("%s",a);

这样我们就先创建了一个字符类型的数组,并分配了十字节的长度。

当我们输入A CDEFGHIJK后

在计算机储存中字符组成的数组表现如下:

"'A''  ''C''D''E''F''G''H''I''NUL'"

6532676869707172730

空格会占用一个字符,字符串结束字符要占最后一位,因此就J,K都不会被存储。

""不属于字符串,只是用于提示计算机你开始输入字符串了,因此不被计算在内。

于是想要完整存储字符串“A CDEFGHIJK”应当分配12位的空间。

特别注意,一个汉字会占用两位

不仅仅是字符串,在scanf函数中所有的输入内容都是先保存在字符数组中,然后再根据解释说明(格式声明)计算并保存为指定的形式。

所以,如果你提前声明了字符数组,自然无需添加&。

空格在scanf函数的字面字符上有特殊的用法

如为了避免char类型读入空格,我们使用" %c",通过在%c前添加空格,以忽略输入有效数据前的所有空格,这是char的特性决定的,其他类型的值会自动忽略输入前的空格并在输入空格时结束数据的获取,此时新输入的数据将在下一次被获取(同一个scanf函数的多个并列参数会在遇到空格后自动结束,避免读取到废弃的值)

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值