【发布时间】:2013-11-16 20:02:08
【问题描述】:
我正在学习在 C++ 中使用数组。这是我为练习这些概念而编写的一个非常简单的程序。但是,当我启动程序时,命令提示符在输出 1 2 3 4 后输出垃圾。
当我将循环中数组的大小更改为 2 时,它可以工作。当我将其更改为零时,它仍然输出两个值。这是怎么回事?为什么数组表达式为2时输出4个值?只有2个值时,不应该只输出3个值吗?
#include <iostream>
#include <conio.h>
int main()
{
int array[4] = { 1, 2, 3, 4 };
for (unsigned int i = 0; i <= array[3]; i++)
{
std::cout << array[i] << "\n" << std::flush;
}
_getch();
return 0;
}
【问题讨论】:
-
把这个:
i <= array[3],改成这个:i < sizeof(array)/sizeof(*array),不要习惯这种习惯,因为这个逻辑会随着动态分配的数组而消失。 -
@WhozCraig:那有什么作用?
-
由于没有更好的术语,它会为您计算“4”。更深入地说,它通过整数除法计算元素的数量,其中整个数组的大小(以字节为单位)除以单个数组元素的大小(以字节为单位)。结果是数组中的元素数(在您的情况下为 4)。但正如我所说,它只适用于固定数组。指针引用的动态数组是一个完全不同的问题。