char charArray[10];
char* pArray = charArray;
for(int i = 0; i < 10; i++)
{
*pArray = '\0';
pArray++;
}
从这个片段开始,* pArray =&#39; \ 0&#39;是什么?意思? 我不明白这。
答案 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::begin
和std::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。这个循环将数组归零。