c语言不懂的问题请教

来源:百度知道 编辑:UC知道 时间:2024/06/14 10:08:40
#include <stdio.h>

main()
{
int *p;
int a[]={1,2,3,4,5};
p=a;
printf("%d,%d,%d",*p,*p++,*p+3);
}

运行结果:2,1,4

请问,为什么不是1,1,5?
是不是TC跟这个有关系么?

#include <stdio.h>

main()
{
int *p;
int a[]={1,2,3,4,5};
p=a;
printf("%d,%d,%d",*p,*(p+1),*p+3);
}

这样运行的结果是 1,2,4
为什么 printf("%d,%d,%d",*p,*(p+1),*p+3); 运行是从左到右执行的?

VC++6结果
1,1,4

GCC结果
2,1,4

C语言的处理方式一向是参数从右到左执行,所以最后1个是4大家都没有异议。
但是第一个vc是1,说明vc是先printf,再进行运算(p+1)
而gcc是2,说明gcc是先运算,再printf

结论:
C语言虽然编程灵活,但这样的技巧是不是该用在别的地方呢?
而且这样,可读性也不好呢。

printf("%d,%d,%d",*p,*p++,*p+3);
结合方式为从右到左
*p+3为4,但是*p没变
*p++先打印*p的值,再自加1,*p变为a[1]=2
再输出*p为2

注意printf("%d,%d,%d",*p,*(p+1),*p+3); 也是从右到左
*p++与*(p+1)是不同的,前者改变了p的位置,而后者没有改变

你是TC?

C语言参数入栈是从右向左

*p+3一定是4
*p++意思是指针p向后移动一个单位,指向a【1】,但*p++当前指向a[0]

这个有点意思,用debug编译1 1 4,release编译2 1 4

为什么 printf("%d,%d,%d",*p,*(p+1),*p+3); 运行是从左到右执行的?

是从右向左的,你要相信,*p+3并没有移动指针,其实是1+3,中间*(p+1)并没有移动指针,p+1指向a【1】,p指向a【0】

http://tieba.baidu.com/f?kz=615111160
楼主有问题在这里说,我有点感兴趣了

#include <stdio.h>

main()
{
int *