免费注册 查看新帖 |

Chinaunix

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

一道面试题,输出为什么为空 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-09 10:22 |只看该作者 |正序浏览
main()   
{   
        char *p1=“name”;   
        char *p2;   
        p2=(char*)malloc(20);   
        memset (p2, 0, 20);   
        while(*p2++ = *p1++);   
        printf(“%s\n”,p2);   
}

论坛徽章:
0
23 [报告]
发表于 2009-09-11 11:10 |只看该作者
3楼正解

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2016-04-23 14:25:46操作系统版块每日发帖之星
日期:2016-05-09 06:20:00
22 [报告]
发表于 2009-09-11 10:15 |只看该作者
main()   
{   
        const char *p1=“name”;   
        char *p2;   
        p2=(char*)malloc(20);   
        memset (p2, 0, 20);   
        p3 = p2;
        while(*p2++ = *p1++);   
        printf(“%s\n”,p2);   
}

p1是一个常指针,还在那++啥呢!

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

回复 #1 scudong 的帖子

是为空撒,p2已经移到后面去了

论坛徽章:
0
20 [报告]
发表于 2009-09-10 09:47 |只看该作者
可以先用一个指针p3保存p2的初始值,也就是字符串的首地址,操作完后,再打印p3

main()   
{   
        char *p1=“name”;   
        char *p2, *p3;   
        p2=(char*)malloc(20);   
        memset (p2, 0, 20);   
        p3 = p2;
        while(*p2++ = *p1++);   
        printf(“%s\n”,p3);   
}

论坛徽章:
0
19 [报告]
发表于 2009-09-10 01:04 |只看该作者
哈哈,这个问题第一眼看上去还真没有反应过来,如果让我做在面试时肯定会做错,忘记这时两个指针都已经指到了串的末尾。。

论坛徽章:
0
18 [报告]
发表于 2009-09-10 00:00 |只看该作者
原帖由 mcemil 于 2009-9-9 17:20 发表
谢谢指正,一般能不用指针尽量不用的

论坛徽章:
0
17 [报告]
发表于 2009-09-09 20:53 |只看该作者

回复 #1 scudong 的帖子

p1,p2都指向字符串结束符后面了。

论坛徽章:
0
16 [报告]
发表于 2009-09-09 19:36 |只看该作者
是的,要把指针指回来啊,常用的方法是在while前将头指针保留

论坛徽章:
0
15 [报告]
发表于 2009-09-09 19:12 |只看该作者
原帖由 felixzxh 于 2009-9-9 18:44 发表
++运算符改变源操作数

你的意思是指针移到末尾了吧?
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP