使用指针循环数组

时间:2015-06-03 13:05:09

标签: c++ arrays pointers

char ch[] = {'h', 'e', 'l', 'l', 'o'};
char* p = ch;
while(*p){
    std::cout << *p << std::endl;
    ++p;
}

这会打印数组+垃圾的元素,但是

int ch[] = {1, 2, 3, 4};
int* p = ch;
while(*p){
    std::cout << *p << std::endl;
    ++p;
}

这只打印数组中没有垃圾的元素。

我只是c ++的初学者,我没有弄清楚这种行为背后的原因。

需要一些帮助。

2 个答案:

答案 0 :(得分:3)

node_modules/**/* coverage/**/* public/js/lib/**/* doc/**/* plato/**/* 一直持续到达到0的值。在任何一种情况下,你都没有确定有一个0终止你的阵列,只是运气一个人工作,而另一个没有

答案 1 :(得分:0)

由于缺少定义的字符串结尾,您将继续迭代超出预期的字符数组,这将输出相邻内存中保存的数据。字符串通常在c / c ++中设置,以空字符(&#39; \ 0&#39;)终止,这允许数组迭代直到* p ==&#39; \ 0&#39;。

如果您向数组添加元素,请将最后一个元素设置为&#39; \ 0&#39;,并将while循环设置为运行直到* p ==&#39; \ 0&#39;,您应达到预期的效果。

这样可以防止循环超出预期范围,除了在功能上非常重要之外,这是一个很好的软件安全实践,因为输出额外的内存有时可以在应用程序中被利用。