C语言程序,输出为何是SO???
答案:3 悬赏:40 手机版
解决时间 2021-01-11 03:59
- 提问者网友:相思似海深
- 2021-01-10 17:42
C语言程序,输出为何是SO???
最佳答案
- 五星知识达人网友:野慌
- 2021-01-10 18:50
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],表示这个地址以后的字符全部输出。。
我的理解对吗?
谢谢!!追答是的
即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],表示这个地址以后的字符全部输出。。
我的理解对吗?
谢谢!!追答是的
全部回答
- 1楼网友:玩家
- 2021-01-10 20:44
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],表示这个地址以后的字符全部输出。。
我的理解对吗?
谢谢!!追答正确!
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],表示这个地址以后的字符全部输出。。
我的理解对吗?
谢谢!!追答正确!
- 2楼网友:不想翻身的咸鱼
- 2021-01-10 19:40
#include
main()
{ char *p[]={"BOOL","OPK","H","SP"};int i;
for(i=3;i>=0;i--)
printf("%s ",p[i]);//这里改一下,不想要空格就删了。
printf(" ");
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯