【发布时间】:2015-04-24 04:07:00
【问题描述】:
我自学 C++ 已经有一段时间了,但在指针方面我遇到了“障碍”。我将其用作我的http://www.cplusplus.com/doc/tutorial/pointers/ 学习材料,但我仍然遇到问题。所以为了测试一些东西,我想将一个数组的内容复制到另一个数组中。我写了以下内容。
char arrayA[15] = "abcdef";
char arrayB[15];
char *a = arrayA;
char *b = arrayB;
cout << "before loop:" << endl;
cout << a << endl;
cout << b << endl;
while (*a != '\0') {
// Copy the contents of a into b
*b = *a;
// Step
a++;
b++;
}
// Assign null to the end of arrayB
*b = '\0';
cout << "after loop:" << endl;
cout << a << endl;
cout << b << endl;
我得到以下结果。
before loop:
abcdef
after loop:
当我 cout 循环之前的内容时,我得到了预期的结果。 a 包含 "abcdef" 而b 什么都不是,因为还没有任何值。现在在循环之后,a 和 b 都没有显示任何结果。这就是我迷路的地方。我使用* 取消引用a 和b 并将a 的值分配给b。我哪里做错了?我需要使用& 吗?
解决方案:
循环完成后,指针*a指向arrayA的末尾,指针*b指向arrayB的末尾。因此,要获得 arrayB 的完整结果,只需 cout << arrayB。或者创建一个永不改变的指针,在循环结束时始终指向数组B char *c = arrayB 和 cout << c。
【问题讨论】:
-
注意NULL不是空字符,写成'\0'。 NULL 是一个 C 宏,表示一个空指针,不应该在 C++ 中使用(对于指针,使用新的文字 nullptr,或者简单地为 0)。
-
@Peter Schneider 谢谢。进行了必要的更改。
-
哦,不要使用未初始化的数组,例如用于输出(例如“beforeLoop”之后的arrayB)。在第一个 char 中写入 '\0' 使其变为空字符串。您的程序只是巧合地工作(除非数组是全局的,在这种情况下它们被归零)。
标签: c++