我试图在C中理解这种程序,但我无法理解。确切地说,我无法弄清楚* s是如何改变的,以及编译器显示210012的原因。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void WhatIamDoing(char *s) {
char ch;
if (*s) {
ch = *s;
s++;
WhatIamDoing(s);
putchar(ch);
}
}
int main() {
char s[20] = "012" ;
WhatIamDoing(s) ;
printf( "%s", s ) ;
}
答案 0 :(得分:4)
我认为很容易这样思考。在void函数中,char *s
是一个指向char
变量或char数组的指针。在您的情况下,它指向char数组s[20]="012"
。在WhatIamDoing
函数s
中指向'0'
个字符,并将其分配给char ch
变量。然后s++
现在&#39;&#39;指向字符'1'
。你再次调用函数WhatIamDoing(s)
,它也是相同的(这就像一个递归函数),在最后WhatIamDoing(s)
中,char ch
被赋值为'2'
。完成所有字符后,如果condition为false,则(最后说到null字符)。在命令putchar
的最后一项功能中,您打印'2'
,然后'1'
,然后'0'
。这意味着在运行WhatIamDoing
函数后,您将以相反的顺序打印char数组。在main函数中,您再次打印s字符串。那么你得到了"210021"
。希望你明白这个主意。