问题描述
- 有关数组的维数的问题
-
不是说数组的维数不能是 非const 变量吗?可下面的程序为什么编译成功而且运行正确?难道是编译器的问题?我目前用的编译器是DEV C++ 5.6.1#include<iostream> using namespace std; int main() { size_t array_type = 10; int array[array_type]; for (size_t ix = 0; ix != array_type; ix++){ array[ix] = ix + 1; cout << array[ix] << " "; } return 0; }
解决方案
GCC支持这种写法,C或C++程序都可以,C99就可以。VS2010都不支持C99,还是C89,比如所有的变量都得在开头几行定义,C++的话会宽一点,但也不支持非常量的数组大小定义。
解决方案二:
应该是编译器的问题,在 VS2008 中编译出错的。
// TestWin32Console.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
size_t array_type = 10;
int array[array_type]; /*1>c:datatestwin32consoletestwin32console.cpp(10) : error C2057: 应输入常量表达式
1>c:datatestwin32consoletestwin32console.cpp(10) : error C2466: 不能分配常量大小为 0 的数组*/
for (size_t ix = 0; ix != array_type; ix++){
array[ix] = ix + 1;
cout << array[ix] << " ";
}
return 0;
}
解决方案三:
array[n]的n是数组的长度,不是维数。
int a[10];这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯中的1-10不一样,于是产生一个a[10]的错误,即数组下标越界。
c和c++语言中数组下标越界,编译器是不会检查出错误的,但是实际上后果可能会很严重,比如程序崩溃等,所以在日常的编程中,程序员应当养成良好的编程习惯,避免这样的错误发生。
解决方案四:
“[]”里的是数组的长度不是维数,这应该是编译器问题,好像最新的C++支持动态数组了。
时间: 2024-12-31 01:32:59