char charArray[10];
char* pArray = charArray;
for(int i = 0; i < 10; i++)
{
*pArray = '\0';
pArray++;
}
Run Code Online (Sandbox Code Playgroud)
从这个片段开始,*pArray ='\ 0'是什么?意思?我不明白这.
Vla*_*cow 10
在循环指针由于其初始化而指向pArray数组的第一个字符之前charArray.
char* pArray = charArray;
Run Code Online (Sandbox Code Playgroud)
因此,在第一次迭代的循环内部*pArray产生对数组的第一个字符的引用.因此,引用的字符由字符文字'\ 0'指定.
*pArray = '\0';
Run Code Online (Sandbox Code Playgroud)
然后指针被指示
pArray++;
Run Code Online (Sandbox Code Playgroud)
并指向下一个字符.因此,在下一次迭代中,数组的第二个字符将设置为'\ 0'.由于循环有10次迭代,因此数组的所有10个字符将由'\ 0'初始化.
这可以在数组定义中更简单地完成
char charArray[10] = {};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数组的所有10个字符也将由'\ 0'初始化.
在C中,等效结构看起来像
char charArray[10] = { '\0' };
Run Code Online (Sandbox Code Playgroud)
考虑到如果仅在循环内部需要变量pArray来初始化数组的元素,那么最好以下面的方式编写循环(如果你想使用指针):
const size_t N = 10;
char charArray[N];
for ( char *pArray = charArray; pArray != charArray + N; ++pArray )
{
*pArray = '\0';
}
Run Code Online (Sandbox Code Playgroud)
实际上,这个循环相当于std::fill你可以使用的标准算法的内部实现.
例如
const size_t N = 10;
char charArray[N];
std::fill( charArray, charArray + N, '\0' );
Run Code Online (Sandbox Code Playgroud)
或者您可以使用标准函数std::begin并std::end指定数组的第一个和最后一个迭代器.
如果你想使用字符串,这里是一个更好的替代这个可怕的代码:
std::string str;
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的想要一个包含10个字符的数组,你可以使用:
std::array<char, 10> arr;
arr.fill('\0');
Run Code Online (Sandbox Code Playgroud)
如果您想要一个最初包含10个字符的可调整大小的数组,请使用:
std::vector<char> vec(10, '\0');
Run Code Online (Sandbox Code Playgroud)