永发信息网

C语言程序,输出为何是SO???

答案:3  悬赏:40  手机版
解决时间 2021-01-11 03:59
C语言程序,输出为何是SO???
最佳答案
char *p[]={"BOOL","OPK","H","SP"},定义了一个指针数组,每一个指向一个静态字符串的地址
即p[0] = "BOOL" p[1] = "OPK" p[2] = "H" p[3] = "SP"

如果写成printf("%s",*p[i]);,*p[i]就是p[i]里面的内容,即字符串的第一个字符的内容。
%s要求传入一个地址,然后从该地址开始打印,一直打印到字符串结束符'\0'为止,如果写成*p[i]的话,就相当于把‘B’ ‘O’ ‘H’ ‘S’这些字符传给了printf,字符并不是一个合法的地址,printf不会打印任何东西。

如果写成printf("%c",p[i]);,p[i]就是这几个字符串的地址。
%c要求传入一个char类型数据,而地址是一个int类型的数据(32位操作系统),这个意思就是将地址转换成char类型(丢弃高24位),然后将这个值的ASCII码字符打印出来,那具体打印的值就要看这几个字符串所在的地址是什么了。追问以i=1为例
p[1]代表OPK的首地址,即O的地址;而*p[1]就是O,所以输出字符O时用*p[1]
而输出字符串时用p[1],表示这个地址以后的字符全部输出。。
我的理解对吗?
谢谢!!追答是的
全部回答
char *p[] ;
p[i]是char *, *p[i]是char , 所以输出%s时用p[i] 输出%c时用*p[i],反了就会出现异常现象!追问以i=1为例
p[1]代表OPK的首地址,即O的地址;而*p[1]就是O,所以输出字符O时用*p[1]
而输出字符串时用p[1],表示这个地址以后的字符全部输出。。
我的理解对吗?
谢谢!!追答正确!

#include
main()
{ char *p[]={"BOOL","OPK","H","SP"};int i;
  for(i=3;i>=0;i--)
  printf("%s ",p[i]);//这里改一下,不想要空格就删了。
  printf(" ");
 
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
钓鱼浮标怎么调?
温岭火车一等座和二等座的区别
恋爱了起来 求求也许的浪漫 ......歌名
中国有13亿人口农村占多少人口
2.4千克多少钱一盒
为什么针灸拔罐后有点晕
如何炒好板粟
哪有武术教练?我需要一名武术教练。
赃爨爨衅黉鲎嬲怎么读
高速行驶,轿车和suv哪个更稳
有三盘猕猴桃,第一盘有8个,第二盘有五个,第
蒋廷黻先生说过这样的话:“在鸦片战争以前,
中国为什么不改成资本主义
中国人民银行决定,从2011年4月21日起,上调
三星l9508v能刷华为系统吗
推荐资讯
我很讨厌和自己不喜欢的人住在一起,但她们硬
单招考试满分多少分 多少分能过
当归和桑椹同食吗?谢谢了,大神帮忙啊
今天被一台雪佛兰的车子刮了,车牌号豫QX7330
神州笔记本电脑系统重装出现蓝屏 怎么办!求
螺杆压缩机都有哪些分类结构?
I7-7700K用酷冷至尊冰神B120i水冷散热器满载
有风筝这个意向的古诗词
家庭超过几人可以申请两户用电
疯狂奔放的夏天,读后感,300字
求一部南美电影
判三年缓刑四年j是什么意思?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?