我一直在学习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
。或者创建一个永不改变的指针,并且在循环结束时始终指向arrayB char *c = arrayB
和cout << c
。
注意,NULL不是空字符,它是写为 '\ 0'。 NULL是一个表示空指针的C宏,不应该在C++中使用(对于指针,使用新的文字nullptr,或者简单地使用0)。 –
@Peter Schneider谢谢。做了必要的更改。 – MrPilot
哦,并且不要使用未初始化的数组,例如用于输出(比如“beforeLoop”之后的arrayB)。在第一个字符中写入'\ 0',以便它变成空字符串。你的程序只能巧合使用(除非数组是全局的,在这种情况下它们被置零)。 –