/*****************************************************************************************
我自己做了一个测试,但是还是有几点不懂的地方,代码在下方
测试结果:
1、int型数组如果去掉了中括号就是第一个元素的地址
2、char型数组如果去掉了后面的中括号就能够正常格式化输出
hello world,如果单独输出第一个元素的话,就会自动结束运行
问:
1、如果数组去掉了后面的中括号的话就是第一个元素的地址的话,
那①处(下面代码标注)为什么不是输出第一个元素的地址而是输
出hello world
2、如果我想要显示第一个字符,方法如第②处那样,点击运行之后,
跳出来的窗口就会自动停止工作,为什么不是显示第一个字符而
是停止工作
3、如果char型要去掉一个中括号的话,那么第③处的代码1处应该
是显示hello,代码2处应该是显示world,但是输出结果却不是我
想的那样(代码最后有输出结果),为什么此处的输出不是我想的那样
4、问题写在文章最末的说明里
*****************************************************************************************/
#include "stdio.h"
void main()
{
int a[]={1,2,3,4,5,6,7,8,9};
char s[]="hello world";
char ss[][5]={"hello","world"};
//输出a
printf("%d\n",a);
//输出a的地址
printf("%d\n",&a);
//输出a的第一个元素的地址
printf("%d\n",&a[0]);
//①格式化输出字符
printf("%s\n",s);
//②错误代码
//printf("%s\n",s[0]); //程序停止工作,但代码编译未报错
//③验证猜想
//代码1
printf("%s\n",ss[0]);
//代码2
printf("%s",ss[1]);
}
/*********输出结果*****************
1703708
1703708
1703708
hello world
helloworldm
worldm
*********************************/
/**************说明***************
输出结果最后两行最后的m是随机乱码,有
时候会是y,有时候会是x,有时候会是空白
为什么会出现乱码
********************************/
2 回答
已采纳
克洛
TA贡献6条经验 获得超2个赞
由于你在printf里面给的格式是%s,意思是以字符串输出,你给该字符串的首地址,所以输出的是hello world,如果想输出s的地址把%s改成%d就可以了,%d的意思是以整型输出
你指定了要用字符串的方式输出,但是后面给的不是一个地址,所以出错了,如果你想要显示第一个字符,用%c指定输出格式是字符,就是把代码里的%s换成%c就可以了
4.你那个ss赋值的时候是直接用字符串赋值,但是你的数组长度是5,所以最后没办法自动添上/0作为结束符,printf输出字符串的需要遇到/0才能结束,你的字符串后面没有/0,所以会一直输出直到遇到/0,这是后面乱码的原因.可以把ss每行定义为6个元素,大小够用了,后面就不会出现乱码了
- 2 回答
- 1 关注
- 4008 浏览
添加回答
举报
0/150
提交
取消