新手求助,关于指针的问题
代码如下:
#include<stdio.h>
int main(void)
{
char *ptr="abcdef";
printf("%c,%c",*ptr,*ptr++);
return 0;
}
为什么结果是:b,a
而代码改成:
#include<stdio.h>
int main(void)
{
char *ptr="abcdef";
printf("%c,%c",*ptr++,*ptr);
return 0;
}
则结果为:a,a。
求高手指点
另外,编译器为code:blocks。编译如下代码:
#include<stdio.h>
int main(void)
{
int a;
a=2;
printf("a=%d a=%d\n" ,a++,++a);
return 0;
}
的结果为:a=3 a=4。感觉很指针的刚好相反。
[解决办法]
典型的未定义行为。
参考下面链接中的文章:
C,C++表达式求值顺序 裘老的解释
[解决办法]
*ptr++
等同于
*ptr;
ptr++
所以,你上面的代码等同于
#include<stdio.h>
int main(void)
{
char *ptr="abcdef";
char a,b;
a=*ptr;
b=*ptr;
ptr++;
printf("%c,%c",b,a);
return 0;
}