Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2911575
  • 博文数量: 412
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 7374
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-25 15:15
个人简介

学习是一种信仰。

文章分类

全部博文(412)

文章存档

2014年(108)

2013年(250)

2010年(11)

2009年(43)

我的朋友

分类: C/C++

2009-06-04 14:05:59

论坛上看到一帖子如下:
#include;
void main()
{
    char *ptr = "csdn";
    printf( "%c\n",*(ptr++) );
}
结果是什么,不许用编译器,看题后5秒钟内开始回答,还要说出原因
 
本人上机测试结果如下:
#include
void main()

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

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

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

#include
void main()
{
     char    *ptr = "csdn";
     printf( "%c\n", *++ptr );
     printf( "%c\n", *ptr);
     /*输出结果为:s
                         s
       因为前缀自增操作符的返回结果是自增后的值,或者说前缀自增符是先加一再使用
       且前缀自增符和指针符为同优先级操作符(都是单目操作符),但是右结合,所以还是先算前缀自增再取指针
       也就是说*(++ptr)和*++ptr是完全等价的
     */
}
阅读(799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~