对于带指针和终止空值的循环

时间:2014-07-20 20:06:50

标签: c++ null

char charArray[10];
char* pArray = charArray;
for(int i = 0; i < 10; i++)
{
*pArray = '\0';
pArray++;
}

从这个片段开始,* pArray =&#39; \ 0&#39;是什么?意思? 我不明白这。

3 个答案:

答案 0 :(得分:10)

在循环指针pArray由于其初始化而指向数组charArray的第一个字符之前。

char* pArray = charArray;

因此,在第一次迭代*pArray循环内部会产生对数组第一个字符的引用。因此,引用的字符由字符文字&#39; \ 0&#39;。

指定
*pArray = '\0';

然后指针被标记

pArray++;

并指向下一个字符。因此,在下一次迭代中,数组的第二个字符将被设置为&#39; \ 0&#39;。 由于循环有10次迭代,因此数组的所有10个字符将由&#39; \ 0&#39;初始化。

这可以在数组定义

中更简单地完成
char charArray[10] = {};

在这种情况下,数组的所有10个字符都将由&#39; \ 0&#39;初始化。

在C中,等效结构看起来像

char charArray[10] = { '\0' };

考虑到如果仅在循环内部需要变量pArray来初始化数组的元素,那么最好以下面的方式编写循环(如果你想使用指针):

const size_t N = 10;
char charArray[N];

for ( char *pArray = charArray; pArray != charArray + N; ++pArray )
{
  *pArray = '\0';
}

实际上,这个循环等同于你可以使用的标准算法std::fill的内部实现。

例如

const size_t N = 10;
char charArray[N];

std::fill( charArray, charArray + N, '\0' );

或者您可以使用标准函数std::beginstd::end来指定数组的第一个和最后一个迭代器。

答案 1 :(得分:5)

如果你想使用字符串,这里有一个更好的替代方案:

std::string str;

或者,如果确实想要一个包含10个字符的数组,您可以使用:

std::array<char, 10> arr;
arr.fill('\0');

如果您想要一个最初包含10个字符的可调整大小的数组,请使用:

std::vector<char> vec(10, '\0');

答案 2 :(得分:3)

字符文字'\0'是NUL字符,值为0x00。这个循环将数组归零。