gpt4 book ai didi

c - C语言中的指针

转载 作者:行者123 更新时间:2023-11-30 21:21:36 27 4
gpt4 key购买 nike

我需要一点帮助,我在一些 Facebook 页面上看到了以下 2 段代码。

代码1:

/*this is fyn and will print knowledge*/ ‪ 
#‎include‬<stdio.h>
void choco(char *s)
{
if(*s=='\0')
return;
printf("%c",*s);
choco(++s);
}
main()
{
choco("knowledge");
}

代码2:

/*even this is fyn bt it wll print egdelon*/‪
#‎include‬<stdio.h>
void choco(char *s)
{
if(*s=='\0')
return;
choco(++s);
printf("%c",*s);
}
main()
{
choco("knowledge");
}

有人可以详细解释一下这两个 C 代码的输出吗?我有点困惑。

最佳答案

  • choco("knowledge"); 在两个示例中都调用 chocho 函数,并使用指向字符串 knowledge 的第一个字符的指针, 'k'。以这种方式创建的 C 字符串将始终包含尾随字节“0”,因此字符串函数确实知道字符串的结尾位置。
  • if(*s=='\0') return; 如果到达字符串末尾(0 字节,见上文),则跳过
  • printf("%c",*s); 打印指针 s 当前指向的字符。 *s* 用于从指针检索实际字符。
  • choco(++s); 调用 choco 时,指针 s 加一,因此它指向字符串的下一个字符。

使用此信息,第一个代码示例非常简单。调用函数 choco 并打印第一个字符。然后它让指针指向下一个字符('n')并使用更新后的指针调用自身。重复此操作,直到到达字符串末尾(0 字节)。

在第二个代码示例中,函数首先使用下一个字符调用自身,并在调用返回时打印该字符。因此最后一个字符首先被打印。

考虑调用 choco("abc");:

  1. choco 被调用,s 指向 a
  2. 在 choco 的第 3 行,再次调用 choco,s 指向 b
  3. 在 choco 的第 3 行,再次调用 choco,s 指向 c
  4. 在 choco 的第 3 行,再次调用 choco,s 指向尾随“0”
  5. choco 由于条件 if(*s=='\0')
  6. 而返回
  7. 3.的choco执行继续输出c
  8. 2.的choco执行继续输出b
  9. 1.的choco执行继续输出a

我在您的第二个代码示例中添加了一些调试输出:

#include <stdio.h>
void choco(char *s){
printf("choco was called with: %c\n", *s);
if(*s=='\0'){
printf("I return\n");
return;
}
choco(s+1);
printf("output: %c\n",*s);
}
int main()
{
choco("knowledge");
}

输出如下:

choco was called with: k
choco was called with: n
choco was called with: o
choco was called with: w
choco was called with: l
choco was called with: e
choco was called with: d
choco was called with: g
choco was called with: e
choco was called with:
I return
output: e
output: g
output: d
output: e
output: l
output: w
output: o
output: n
output: k

关于c - C语言中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com