2 xyhqqlove xyhqqlove 于 2016.01.22 22:12 提问

scanf变量类型的问题

请问scanf("%s", s)不用&,但是scanf("%d", &n);就需要&,那么别的变量类型呢?

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.22 22:14
已采纳

因为字符数组已经是指针了,所以不需要取地址,如果是别的变量,都需要。如果这个类型本身是指针,就不需要

比如
int i;
int * p = &i;
scanf("%d", p);

enpterexpress
enpterexpress   Rxr 2016.01.22 22:47

scanf(“格式控制字符串”, 地址表列);
地址列表的不同表示

qq_27183003
qq_27183003   Ds   Rxr 2016.01.22 23:12

c语言规定数组名就是地址,所以如果s是数组名,或者是指针,那么
scanf("%s",s); 就可以了,s就是地址,不用在加&

xyhqqlove
xyhqqlove 谢谢,你们都是对的。
2 年多之前 回复
91program
91program   Ds   Rxr 2016.01.22 22:27

scanf函数的一般形式为:
scanf(“格式控制字符串”, 地址表列);
所以,它需要地址。对于变量,看它是否是地址?如果不是,则需要取地址符,如:&。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言程序设计题库
c程序基本结构,变量类型、数学表达式,printf和scanf综合............
double类型的变量通过scanf函数赋值时需注意的问题
希望对初学者有所帮助
scanf的缓冲区问题
Scanf函数的缓冲区问题 scanf输入字符串、整型、实型等数据判断的方式都一样,回车、空格、tab键都认为是一个数据的结束。但是字符不同于字符串,回车,空格很可能被当成字符被输进去,要特别注意!回车、空格等都有对应的ASCII码,所以用scanf输入字符时要小心这些东西被当成字符输进去,而输入字符串和整型、实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。当然如果输入格式不是"%
scanf输入时候的\n问题
当我们使用scanf输入时候,非控制符一定要原样输入,不然就会跟自己预期结果不一样。下面我们来看一下实际的例子。 #include int main() { int n; scanf("%d\n",&n); //注意此处的\n printf("%d",n); return 0; } 直到输入\n回车后才会输出,这就是scanf输入时候,非控制字符一定要原样输入,使用scanf一定
scanf函数的返回值问题
1.scanf()函数有返回值且为int型。 2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。 scanf("%d%d", &a, &b); 如果a和b都被成功读入,那么scanf的返回值就是2 如果只有a被成功读入,返回值为1 如果a和b都未被成功读入,返回值为0 如果遇到错误或遇到end of file,返回值为EOF。
c语言由一个小问题引发的关于gets和scanf的探究
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/ scanf("%s",string); /*遇到空格
scanf函数中的格式字符串及注意事项
scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 scanf函数的一般形式为:  scanf(“格式控制字符串”, 地址表列); 格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。其中有方括号[]的项为任选项。 其各项意义为: 1.类型: 表示输入数据的类型  d
关于scanf对换行的吸收
#include int main() { // 先读入一个整数,再读入2个串 int a; char b1[100]; char b2[100]; scanf("%d", &a); fgets(b1, sizeof(b1), stdin); fgets(b2, sizeof(b2), stdin); printf("a = %d\n", a); printf("b
scanf的安全输入问题
引入:华为的一道经典面试用老师的话说,如果你脱口而出答案是5,那么你连C语言们都还没摸到,眼尖的同学会看出数组溢出了,但至于结果怎么算却搞不明白。至于大神吗,分分钟得出答案。好了别的不多扯,我们看看这个到底怎么算。 结果:i=6776421 进入到内存中分析: 连续定义的变量,内存地址一般也相邻 首先依次在栈区为变量开辟空间(注意方式,整形是4个字节以计算,char型一字节一计算) 越界后
C++ scanf()输入string类型变量
步骤: 1、string tmp;//声明 2、tmp.resize(11);//限定大小 3、scanf("%s", &tmp[0]);//输入 输入数据中,超出指定个数的部分会被自动裁去。