C语言scanf如果输入的是数组,可以不打&吗?

#include<stdio.h>
void main()
{
char s[80],s1[40],s2[40]; //定义数组
int i=0,j=0; //初始化循环控制变量
scanf("%s",s1);
scanf("%s",s2);
while(s1[i]!='\0') //判断字符串s1是否结尾
s[i]=s1[i++]; //拷贝s1到s中,同时i做++
while(s2[j]!='\0') //判断字符串s2是否结尾
s[i++]=s2[j++]; //拷贝
s[i]='\0'; //字符串以\0结尾
printf("%s\n",s);
}
不打&和打&都行,为什么啊?

可以,但是输入数据的时候一定也要加上逗号。
用scanf()读取数据时,输入的格式必须和scanf()的格式控制字符串对应,比如说:
1、scanf("%d,%d",&a,&b);因为两个%d之间有一个逗号,所以在输入时两个整数之间只能用逗号分隔,如果用其它符号分隔就会出错(比如说此时用空格、回车分隔就会出错)
2、scanf("%d%d",&a,&b);这个格式控制字符串就可以用空白分隔(空格,回车都可以)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-14
&表示取地址。
其实从效果上来说不打&和打&是一样的,但是这里要注意 s 和 &s 的类型是不同的。s 相当于 &s[0],而 &s是一个指向 char[80] 的指针,类型是 char(*)[80]。
以下代码可以看出这个不同:
1 #include <stdio.h>
2
3 int main()
4 {
5 int array[100] = {0, 1, 2};
6 typedef int (*ARRAY)[100];
7 int* p1 = array;
8 ARRAY p2 = &array;
9 //int* p3 = &array; //这样编译错误
10
11 printf("p1 = 0x%08X\n", p1);
12 printf("p2 = 0x%08X\n", p2);
13 printf("p1[2] = %d\n", p1[2]);
14 printf("p2[2] = %d\n", p2[2]);
15 printf("(*p2)[2] = %d\n", (*p2)[2]);
16
17 getchar();
18 return 0;
19 }

运行结果可能是:

p1 = 0x0022FDF8
p2 = 0x0022FDF8
p1[2] = 2
p2[2] = 2294040
(*p2)[2] = 2本回答被网友采纳
第2个回答  2009-05-14
scanf 里面的变量只能是地址。二数组s1[40]中的s1本身就是这个数组的首地址。而加&表示取地址
第3个回答  2009-05-14
&是什么功能???
取地址。
数组名可以看做数组首地址。
所以。。。
第4个回答  2009-05-14
字串可以

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网