发信人: 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]
|
|