程序不打印原始数组虽然复制数组工作正常...........有人也可以向我解释一下while循环是如何工作的(我是新手指针) ......
// Copy an array in C++ using pointers
#include<iostream.h>
using namespace std;
void main()
{
char name[] = {'S','P','A','R','T','A','N'};
char copy[7];
char *p1, *p2;
p1 = name;
p2 = copy;
while(*p1) *p2++ = *p1++;
*p2 = 0;
cout<<"Here is the original name array:\n";
p1 = name;
cout<<name<<"\n";
while(*p1) cout<< *p1++ <<" ";
cout<<endl;
cout<<"Here is the copy:\n";
p1 = copy;
while(*p1) cout<< *p1++ <<" ";
cout<<endl;
}
答案 0 :(得分:3)
可以按照您的方式初始化char
数组。
但是之后你不能将它称为以空字符结尾的字符串(因为最后一个字符不是 0)。因此,您无法将其传递给任何假设 是以空字符结尾的字符串的函数。
函数cout<<
(operator<<
类的iostream
)恰好是其中一个函数。
除此之外,你不能循环数组直到达到0字符(使用while(*p1)
),因为你将读取通过数组末尾的内存,因此可能会执行内存访问冲突
您可以通过更改以下内容来解决这两个问题:
char name[] = {'S','P','A','R','T','A','N'};
要:
char name[] = "SPARTAN";
编译器基本上将其称为:
char name[] = {'S','P','A','R','T','A','N','\0'};
你有一个以空字符结尾的字符串。
注意:&#39; \ 0&#39;相当于0,也称为&#34;空字符&#34;。