【问题标题】:Copying one array to another using a while loop使用 while 循环将一个数组复制到另一个数组
【发布时间】:2018-10-12 07:03:15
【问题描述】:

我遇到了下面这段代码,它假设需要两个不同的字符数组,将一个复制到另一个然后打印出来;

#include <stdio.h>
void main()
{
  char a[15] = "hello";
  char b[15] = "goodbye";
  char * aa = a, *bb = b;
  while ( (*bb++ = *aa++) );
  printf("%s,%s\n",a,b);
}

我不确定 while 语句在这里是如何工作的。看起来它正在将 b 的地址复制到 a 的地址,但我真的不知道这里发生的事情的基本工作原理。任何理解这一点的帮助将不胜感激。

【问题讨论】:

  • 一本关于 C 的好书应该可以回答这个问题......
  • 一本关于 C 的书也应该告诉你 main() 返回 int。
  • 对于这样一个简单的程序,最好在纸上简单地模拟行为或在调试器中逐步执行。这应该揭示背后的逻辑。

标签: c arrays while-loop


【解决方案1】:

须知:

  • *aa 取消引用指针 aa,因此访问元素 aa 指向现在

  • aa++ 将aa 加一。因为aa 是一个指针,它现在指向next 元素。这发生在在评估之后。

  • C 中的 字符串 总是以 0 字节结尾。

  • 在 boolean 上下文中,0 为 false,任何其他值为 true

  • assignment 计算为所分配的值。

所以,当遍历你的字符串时,最终*aa 将是0(字符串的结尾),这使得整个表达式(*bb++ = *aa++) 具有0 的值——在while条件,这是错误的,导致循环退出。

【讨论】:

  • 很酷,谢谢我现在再看看,我以前从未读过关于取消引用的内容,我显然有很多东西要学。感谢您的帮助!
  • 好!如果它解决了您的问题,请不要忘记接受答案
猜你喜欢
  • 2022-07-05
  • 2017-02-18
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2023-02-24
  • 2012-09-22
  • 1970-01-01
  • 2013-12-07
相关资源
最近更新 更多