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