使用C ++中的指针进行数组索引

时间:2014-02-08 18:54:02

标签: c++ pointers

程序不打印原始数组虽然复制数组工作正常...........有人也可以向我解释一下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;
}

1 个答案:

答案 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;。