char指针和char数组之间的区别

Jos*_*osh 3 c++ arrays pointers

我定义了2个变量,一个是指针,另一个是数组

char* ptr;
char* array;

ptr = "12345";
array = new int[5];

for(int i = 0; i < 5; i++)
    array[i] = i;

while(*ptr != 0)
        cout << *ptr++ << endl;

//Get garbage values
for(int i = 0; i < 5; i++)
    cout << ptr[i];
Run Code Online (Sandbox Code Playgroud)

我想知道变量之间的主要区别是什么.当我尝试以"ptr []"数组的方式打印值时,为什么我会得到垃圾值,但是当遍历vales时它完全没问题.我似乎无法理解我的变量"ptr"如何指向5个字符,因为它应该只能指向一个字符.

imr*_*eal 7

指针和数组之间有很多区别,但是你得到垃圾的原因是,当你使用ptr索引时,它已经指向"12345"的空终止符.

每次你这样做:

*ptr++;
Run Code Online (Sandbox Code Playgroud)

ptr指向它用于指向的下一个元素(即1,2,3,...).当循环结束时,它指向空终止符\0,然后当您尝试使用它进行索引时i,它指向未知内存.

我建议您使用临时指针来迭代元素:

const char* ptr; // declaring ptr constant in this case is a good idea as well

...

ptr = "12345";
char *tmp = ptr;

...

while(*tmp != 0)
    cout << *tmp++ << endl;
Run Code Online (Sandbox Code Playgroud)