|
我写了个函数,很简单的,用了递归
...
- static void digui(int number)
- {
- static int i=0;
- static int numstr[MAXLEN+1];
- numstr[i++]=(number % 10);
- printf("<%d>:after:%d,%d\n",i,numstr[i],number % 10);
- if( number/10 == 0 )
- {
- .......
- return;
- }
- digui(number/10);
- }
复制代码
....
发现执行了numstr[i++]=(number % 10);后,numstr还是都为0的数组
(从后面的printf可以看到)
但在gdb调试中确可以看到numstr数组的变化,
- ....
- Breakpoint 1, main () at testdigui.c:9
- 9 digui(num);
- (gdb) step
- digui (number=123) at testdigui.c:17
- 17 numstr[i++]=(number % 10);
- (gdb) p numstr
- $1 = {0 <repeats 11 times>}
- (gdb) step
- 18 printf("<%d>:after:%d,%d\n",i,numstr[i],number % 10);
- (gdb) p numstr
- $2 = {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
- (gdb) step
- <1>:after:0,3
- 19 if( number/10 == 0 )
- (gdb) step
- 23 digui(number/10);
- (gdb) step
- digui (number=12) at testdigui.c:17
- 17 numstr[i++]=(number % 10);
- (gdb) step
- 18 printf("<%d>:after:%d,%d\n",i,numstr[i],number % 10);
- (gdb) p numstr
- $3 = {3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}
- (gdb)
- ...
复制代码
程序执行(递归调用的参数123)
....
<1>:after:0,3
<2>:after:0,2
<3>:after:0,1
...
大虾们出来看看啊,谢谢
- numstr[i++]=(number % 10);
- printf("<%d>:after:%d,%d\n",i,numstr[i],number % 10);
复制代码
自己看错了,i++ 了 晕 |
|