精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>技术精解:内存、进程、线程等>>函数调用时进栈的顺序

主题:函数调用时进栈的顺序
发信人: yangcs()
整理人: wenbobo(2002-12-24 09:16:56), 站内信件
    先看看这段程序:

# include <stdio.h>
main()
{
int i=1;
printf("%d %d %d\n",i,i++,i++);
}

输出结果是: 3 2 1
也就是说:进栈顺序:
1.先算最后一个i++,送进去1,i=2
2.再算最后一个i++,送进去2,i=3
3.再送进去3
    从后到前!!!!

于是就能解释这个程序为何不对了:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char ** pp=NULL;
    char *(a[5]);
    int i=0;

    pp=a;
    for( i=0; i< 5; i++)
{
a[i]=malloc(100);
sprintf(a[i],"%s%d","filename",i);
fprintf(stderr,"pp=%x a=%x &a[%d]=%x a[%d]=%x a[%d]=\"%s\" *pp=
%x\n",
pp,a,i,&a[i],i,a[i],i,*pp,*pp++);
}
for(i=0;i<5;i++)
free(a[i]);
exit(0);
}

应该是:
fprintf(stderr,"pp=%x a=%x &a[%d]=%x a[%d]=%x a[%d]=\"%s\" *pp=%x\n
",
pp++,a,i,&a[i],i,a[i],i,*pp,*pp);

在DOS下用TC2.0和unix用cc编译均正常。
哈哈!没用汇编就找到了。

--
风来好个秋!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.72.45.12]

[关闭][返回]