2 baozhadehulu baozhadehulu 于 2015.06.06 16:16 提问

有关数组的维数的问题

不是说数组的维数不能是 非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;
}

4个回答

xiamo20149
xiamo20149   2015.06.07 01:19
已采纳

GCC支持这种写法,C或C++程序都可以,C99就可以。VS2010都不支持C99,还是C89,比如所有的变量都得在开头几行定义,C++的话会宽一点,但也不支持非常量的数组大小定义。

91program
91program   Ds   Rxr 2015.06.06 16:23

应该是编译器的问题,在 VS2008 中编译出错的。

 // TestWin32Console.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    size_t array_type = 10;
    int array[array_type];      /*1>c:\data\testwin32console\testwin32console.cpp(10) : error C2057: 应输入常量表达式
                                1>c:\data\testwin32console\testwin32console.cpp(10) : error C2466: 不能分配常量大小为 0 的数组*/
    for (size_t ix = 0; ix != array_type; ix++){
        array[ix] = ix + 1;
        cout << array[ix] << " ";
    }
    return 0;
}

lalala_12345678
lalala_12345678   2015.06.06 16:24

array[n]的n是数组的长度,不是维数。
int a[10];这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯中的1-10不一样,于是产生一个a[10]的错误,即数组下标越界。
c和c++语言中数组下标越界,编译器是不会检查出错误的,但是实际上后果可能会很严重,比如程序崩溃等,所以在日常的编程中,程序员应当养成良好的编程习惯,避免这样的错误发生。

a1193561652
a1193561652   Rxr 2015.06.06 16:43

“[]”里的是数组的长度不是维数,这应该是编译器问题,好像最新的C++支持动态数组了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!