免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3422 | 回复: 20
打印 上一主题 下一主题

谁能解释一下这个函数的输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-09 10:21 |只看该作者 |倒序浏览
#include <stdio.h>

main()
{
       char *s = "0123456789";
       unsigned long p = 0;
       p = (int *)s;
       printf("p = %s",p);
}
输出结果为: p = 0123456789

如果将最后一句改为:printf("p = %s",(void *)p);
结果不变,谁能解释一下原因?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2009-12-09 10:43 |只看该作者
printf看到%s,就把对应的参数当作 const char *处理

论坛徽章:
0
3 [报告]
发表于 2009-12-09 10:46 |只看该作者

回复 #2 hellioncu 的帖子

那您觉得 p = (int *)s;  这句话有没有问题呢,如果没有问题,那应该是怎么赋值的呢

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2009-12-09 10:51 |只看该作者
sizeof(指针) > sizeof(long)时会有问题

正式的代码不会像你这么写的吧

论坛徽章:
0
5 [报告]
发表于 2009-12-09 11:06 |只看该作者

回复 #4 hellioncu 的帖子

我只是对强制类型转换不是很了解,就写了一个很别扭的代码,见笑了

论坛徽章:
0
6 [报告]
发表于 2009-12-09 11:09 |只看该作者

回复 #4 hellioncu 的帖子

那在p = (int *)s; 中(int *)根本就没有起作用吧?

论坛徽章:
0
7 [报告]
发表于 2009-12-09 11:43 |只看该作者

回复 #1 mingyuexuan 的帖子

printf("p = %s",p);中%s说明从p中地址值所指的内容开始一直输出直到遇到'\0'为止。

论坛徽章:
0
8 [报告]
发表于 2009-12-09 13:11 |只看该作者

回复 #6 mingyuexuan 的帖子

就算起作用了又怎样?
int * 和char *的值都是一样的,你再怎么转化都是白搭
你写成 unsigned char *,double * 结果都是一样的

论坛徽章:
0
9 [报告]
发表于 2009-12-09 13:14 |只看该作者
要看差别用这个代码

  1. #include <stdio.h>
  2. int main( void )
  3. {
  4.   char *s = "0123456789";

  5.   short int *cs = 0;

  6.   int *ci = 0;

  7.   cs = ( short int * )s;
  8.   ci = ( int * )s;
  9.   cs++;
  10.   ci++;
  11.   printf( " %s", cs );
  12.   printf( " %s", ci );
  13.   return 0;
  14. }
复制代码

我的机器上short int 是两个字节,int是4个字节

论坛徽章:
0
10 [报告]
发表于 2009-12-09 16:14 |只看该作者

回复 #9 churchmice 的帖子

你这个代码的差别在哪里呢,仅仅是在cs++ 和ci++上吧,这个在强制类型转换上还是没有起作用啊,不知道是不是我没有理解您的意思,您能否解释一下呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP