论坛上看到一帖子如下:
#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是完全等价的
*/
}
阅读(884) | 评论(0) | 转发(0) |