|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
int a[123];
printf("输入");
scanf("%d",a);
printf("%d\n",a);
return 0;
}
本帖最后由 major_lyu 于 2020-2-16 21:39 编辑
char a[123]是字符数组,可以按照字符串输出。scanf("%s",a)是以字符串形式读入,本质上是将输入字符的ASCII码写入到字符数组a中,并且系统会自动在你输入的最后一个字符之后增加一个’\0',表示字符串终止。比如你输入的是123, 那么数组a的前三个元素分别是字符’1‘’2‘’3‘的ASCII码,即十进制数的49,50,51,第四个元素为‘\0', 即二进制的00000000。你用printf("%s",a)输出时,就会将字符数组当作字符串输出所有字符。需要注意的是,作为字符串输出时碰到字符‘\0',就会认为字符串结束,停止输出后面的字符。
而int a[123]是整型数组。scanf("%d", a)只能读入一个整形数据,并将数据存储到a[0]中,例如你输入的是123,则数组a的第一个元素会被改写成123。
这时你如果用printf("%s",a)输出,输出的第一个字符应该是ASCII码对应的字符’{‘.
如果用printf("%d", a)输出,输出的应该是一串数组,这个数字实际上是数组a第一个元素在内存的位置编号,也就是地址。
你可以用下面的代码验证一下:
- #include<stdio.h>
- int main()
- {
- char b[123];
- int a[123];
- printf("输入a:\n");
- scanf("%d", a); //假设输入123
- printf("%s\n", a); //以字符串形式打印数组a的值,------------------输出:{
- printf("%d\n", a); //十进制形式打印数组a第0个元素地址------------输出:某个地址数据XXXXXXXX
- printf("%d\n", &a); //十进制形式打印数组a第0个元素地址------------输出:XXXXXXXX
- printf("%d\n", &a[0]); //十进制形式打印数组a第0个元素地址------------输出:XXXXXXXX
- printf("%d\n", a[0]); //十进制形式打印数组a第0个元素a[0]的值-----输出:123
-
- printf("输入b:\n");
- scanf("%s", b); //假设输入123
- printf("%s\n", b); //以字符串形式打印字符数组------------------输出:123
- printf("%d\n", b);//十进制形式打印数组b第0个元素地址------------输出:某个地址数据YYYYYYYY
- printf("%d\n", &b);//十进制形式打印数组b第0个元素地址------------输出:YYYYYYYY
- printf("%d\n", &b[0]);//十进制形式打印数组b第0个元素地址------------输出:YYYYYYYY
- printf("%d\n", b[0]);//十进制形式输出字符数组b第0元素b[0]的ASCII码----输出:49;
- return 0;
- }
复制代码
|
|