免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HopeCao
打印 上一主题 下一主题

这个只有两行的C程序至少有80%的人会判断错,不信的就进来! [复制链接]

论坛徽章:
0
81 [报告]
发表于 2009-03-04 12:11 |只看该作者
原帖由 HopeCao 于 2003-2-24 17:27 发表
#include;
void main()
{
    int i = 10;
    i ;>; 5;
    printf( "%d\n", i);
}

结果是什么,不许用编译器,看题后5秒钟内开始回答,还要说出原因.


我就用了编译器,根本就有错。orror

论坛徽章:
0
82 [报告]
发表于 2009-03-09 22:01 |只看该作者
原帖由 HopeCao 于 2003-2-24 17:26 发表
#include;
void main()
{
    char *ptr = "csdn";
    printf( "%c\n",*(ptr++) );
}

结果是什么,不许用编译器,看题后5秒钟内开始回答,还要说出原因

s
ptr 本来指向c,ptr++ 指向下一个字符:s

论坛徽章:
0
83 [报告]
发表于 2009-03-09 22:04 |只看该作者
第二段不懂中....

论坛徽章:
0
84 [报告]
发表于 2009-03-10 09:22 |只看该作者
学习了,看来还需要努力阿。

论坛徽章:
0
85 [报告]
发表于 2009-03-10 09:40 |只看该作者
晚上回去编译一下看看到底是什么。

论坛徽章:
0
86 [报告]
发表于 2009-06-04 12:09 |只看该作者
不好意思,本人在机子上做了实验,学习结果如下:
第一个的输出为:c

原因看以下几个程序:
#include<stdio.h>
void main()
{
     char    *ptr = "csdn";
     printf( "%c\n", *(ptr++) );
     printf( "%c\n", *ptr);
     /*输出结果为:c
                          s
        因为后缀自增操作符的返回结果是自增前的左值,或者说后缀自增符是先使用左值再加一 */
}

#include<stdio.h>
void main()
{
     char    *ptr = "csdn";
     printf( "%c\n", *ptr++);
     printf( "%c\n", *ptr);  
    /*输出结果为:c
                         s
       因为后缀自增操作符的返回结果是自增前的左值,或者说后缀自增符是先使用左值再加一
     且后缀自增符的操作优先级高于指针符(后缀操作符高于所有单目操作符),也就是*ptr++和*(ptr++)是完全等价的 */
}

#include<stdio.h>
void main()
{
     char    *ptr = "csdn";
     printf( "%c\n", *(++ptr) );
     printf( "%c\n", *ptr);
     /*输出结果为:s
                          s
        因为前缀自增操作符的返回结果是自增后的值,或者说后缀自增符是先加一再使用 */
}

#include<stdio.h>
void main()
{
     char    *ptr = "csdn";
     printf( "%c\n", *++ptr );
     printf( "%c\n", *ptr);
     /*输出结果为:s
                          s
        因为前缀自增操作符的返回结果是自增后的值,或者说后缀自增符是先加一再使用
     且前缀自增和指针为同优先级操作符(都是单目操作符),但是右结合,所以还是算前缀自增,再取指针 */
}

论坛徽章:
0
87 [报告]
发表于 2009-06-04 12:38 |只看该作者
好吧,我承认我菜

论坛徽章:
0
88 [报告]
发表于 2009-06-04 13:59 |只看该作者
刚86楼写过了,发现写错了几个关键字,不好意思!

原因看以下几个程序:
#include<stdio.h>
void main()
{
     char    *ptr = \"csdn\";
     printf( \"%c\\n\", *(ptr++) );
     printf( \"%c\\n\", *ptr);
     /*输出结果为:c
                        s
       因为后缀自增操作符的返回结果是自增前的左值,或者说后缀自增符是先使用左值再加一
   */
}

#include<stdio.h>
void main()
{
     char    *ptr = \"csdn\";
     printf( \"%c\\n\", *ptr++);
     printf( \"%c\\n\", *ptr);  
    /*输出结果为:c
                       s
       因为后缀自增操作符的返回结果是自增前的左值,或者说后缀自增符是先使用左值再加一
     且后缀自增符的操作优先级高于指针符(后缀操作符高于所有单目操作符),也就是*ptr++和*(ptr++)是完全等价的
   */
}

#include<stdio.h>
void main()
{
     char    *ptr = \"csdn\";
     printf( \"%c\\n\", *(++ptr) );
     printf( \"%c\\n\", *ptr);
     /*输出结果为:s
                        s
        因为前缀自增操作符的返回结果是自增后的值,或者说前缀自增符是先加一再使用
   */
}

#include<stdio.h>
void main()
{
     char    *ptr = \"csdn\";
     printf( \"%c\\n\", *++ptr );
     printf( \"%c\\n\", *ptr);
     /*输出结果为:s
                        s
       因为前缀自增操作符的返回结果是自增后的值,或者说前缀自增符是先加一再使用
     且前缀自增符和指针符为同优先级操作符(都是单目操作符),但是右结合,所以还是先算前缀自增再取指针
     也就是说*(++ptr)和*++ptr是完全等价的
    */
}

论坛徽章:
0
89 [报告]
发表于 2009-06-04 23:42 |只看该作者
原帖由 HopeCao 于 2003-2-24 17:26 发表
#include;
void main()
{
    char *ptr = "csdn";
    printf( "%c\n",*(ptr++) );
}

结果是什么,不许用编译器,看题后5秒钟内开始回答,还要说出原因

应该是c

论坛徽章:
0
90 [报告]
发表于 2009-06-05 13:04 |只看该作者
2个程序都有错  我就是那80%

#include<stdio.h>;   //分号有错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP