数据在scanf中是怎样存储并写入内存的?
&是地址符(指针),在scanf函数中,读取的数据为用户输入的字符组成的数组。
除了参数本身为字符组成的数组的情况下不需要在参数前加说明&,其余情况均需要使用&为输入类容分配字符串数组空间。
例如:
char a[10];
scanf("%s",a);
这样我们就先创建了一个字符类型的数组,并分配了十字节的长度。
当我们输入A CDEFGHIJK后
在计算机储存中字符组成的数组表现如下:
"'A'' ''C''D''E''F''G''H''I''NUL'"
| 65 | 32 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 0 |
空格会占用一个字符,字符串结束字符要占最后一位,因此就J,K都不会被存储。
""不属于字符串,只是用于提示计算机你开始输入字符串了,因此不被计算在内。
于是想要完整存储字符串“A CDEFGHIJK”应当分配12位的空间。
特别注意,一个汉字会占用两位。
不仅仅是字符串,在scanf函数中所有的输入内容都是先保存在字符数组中,然后再根据解释说明(格式声明)计算并保存为指定的形式。
所以,如果你提前声明了字符数组,自然无需添加&。
空格在scanf函数的字面字符上有特殊的用法
如为了避免char类型读入空格,我们使用" %c",通过在%c前添加空格,以忽略输入有效数据前的所有空格,这是char的特性决定的,其他类型的值会自动忽略输入前的空格并在输入空格时结束数据的获取,此时新输入的数据将在下一次被获取(同一个scanf函数的多个并列参数会在遇到空格后自动结束,避免读取到废弃的值)
本文探讨了在C语言中使用scanf函数时,为何需要在大多数参数前加上&。介绍了数据如何在内存中存储及写入,强调了字符数组与&的关系。同时,文章还讲解了空格在scanf函数中的特殊用法,如何利用空格来忽略输入的空格,并指出不同数据类型在遇到空格时的行为差异。
3560

被折叠的 条评论
为什么被折叠?



