[C]为何scanf("%s", str)不需要&运算
来源:互联网 发布:private是什么意思java 编辑:程序博客网 时间:2024/04/29 04:59
学习C的话,一定会接触到2个语句,scanf和printf。这两个函数都是被定义在头文件stdio.h里的常用函数,在使用的时候需要加上#include<stdio.h>来保证可以成功调用到这2个函数。
scanf是格式输入函数,它按照程序猿指定的格式,从键盘上把数据输入到指定的变量之中。
scanf的用法是
int a;//声明(待输入)变量a为int(Integer,整形)数据类型,系统会分配一段内存地址给a变量 scanf("%d",&a);//从键盘以十进制的形式(%d,decimal system)格式扫描(scanf,formatted-scan)一个输入量,将之存储在变量a所在的地址(&a)%是格式的前缀,%d表示十进制,%o表示八进制,%f表示浮点数...其他的类型,读者可以自行查阅,在此不做赘述....
&是取址运算,&a即取a变量的内存地址。
其实整个scanf函数的核心就是定义扫描的数据为何种格式类型,将之存放在什么位置。
初学者在实践的过程中会发现这么一个问题:为什么在scanf函数里,有的输入变量前面不用加“&”符号?
char str[10]; scanf("%s",str);//str前面不用加“&”符号正如前文所说,scanf的目的是将格式化的数据存储到一个地址……“&"运算得到的结果是一个内存地址,我们就是将某个变量写到这个内存地址里去...
在scanf("%s",str)里的str不需要加“&”运算,其原理已涉及到指针的相关知识。
定义str[10] 为 char数据类型,则str[10]是一个数组,str表示数组所在的内存段的头地址。而scanf()函数所需要的地址,其实质就是一段数据所对应的内存段的起始地址,str已经是其数据所在的内存段的头地址,自然不需要“&”取值。当然,加上的话,也不会报错……
建议
新手在遇到这个问题时,直接忽略。在scanf所需的变量前面都加"&",待学到指针后,再做进一步研究……
- [C]为何scanf("%s", str)不需要&运算
- %*c %*s printf scanf !!!
- scanf("%s")和scanf("%c")区别
- scanf和%s,%c的精巧区别
- 为何错误啊?scanf("%s",a);y=strlen(a);顺序错误啦,愚
- C++,为什么str=new char[strlen(s)+1];中要加一
- C基础printf、scanf函数、,号运算符
- 黑马程序员--c语言:scanf、sizeof、基本运算
- 【C语言连载三】-----------运算符、Scanf函数
- for循环下的scanf("%s%c")问题
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈(转载)
- ARM基础:为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- hdu 1085 Holding Bin-Laden Captive!(母函数)
- 插入排序
- QT中自定义的信号与槽需要注意以下几点
- 移动开发应用平台首选iOS还是Android和Windows Phone?
- Linux用户环境变量
- [C]为何scanf("%s", str)不需要&运算
- java集合框架图
- LINUX几个查看系统硬件信息的有用命令
- java在指定目录下创建文件并向其中写入文字
- oracle 账号的 锁定 与 解锁
- android1.6 launcher源码学习笔记
- 集和品牌官方网站
- 基本语言细节--《深度探索C++对象模型》--(2)The Semantics of Constructors--总结点
- Android音频系统之音频框架