数组在c++中的for循环

array in C++ inside forloop

本文关键字:for 循环 中的 c++ 数组      更新时间:2023-10-16

当我在for循环内写array[i] = ''时会发生什么?

char arrayPin[256];
for(int i = 0; i<256; i++) 
{ 
    arrayPin[i] = ''; 
}

程序试图访问位于<base address of 'array'> + (<sizeof array element> * 'i')位置的内存,并将值0赋值给它(二进制0,而不是字符'0')。这个操作可能成功,也可能不成功,甚至可能使应用程序崩溃,这取决于'array'和'i'的状态。

如果你的数组类型是char*char[],并且赋值操作成功,那么在位置'i'插入二进制0将在该位置截断字符串,当它与理解c风格字符串(printf()是一个例子)的东西一起使用时。

因此,如果您在整个字符串长度的for循环中这样做,您将删除字符串中的任何现有数据,并导致处理c风格字符串的东西将其解释为空/零长度字符串。

char arrayPin[256];

在上面的行之后,arrayPin在一个未初始化的数组中,其内容是未知的(假设它不是全局的)。

     ----------------------------
     |?|?|?|?|?|?|?|?|?|?|...|? |
     ----------------------------
byte: 0 1 2 3 4 5 6 7 8 9     255

代码:

for(int i = 0; i<256; i++) 
{ 
    arrayPin[i] = ''; 
}

将每个arrayPin元素初始化为0:

     ----------------------------
     |0|0|0|0|0|0|0|0|0|0|...|0 |
     ----------------------------
byte: 0 1 2 3 4 5 6 7 8 9     255

我想你有char *array之类的东西。在这种情况下,它会将代码为0x00的字符写入i的位置。

这在处理ANSI字符串时非常有用。表示字符串结束。例如:

char str[] = "Hello world";
cout << str << endl; // Output "Hello world"
str[5] = '';
cout << str << endl; // Output just "Hello"