c++-有关数组的维数的问题

问题描述

有关数组的维数的问题

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

c++-有关数组的维数的问题的相关文章

php 用递归遍历数组多维数

问题描述 php 用递归遍历数组多维数 Array ( [dir] => Array ( [F:开发测试 est9.14香奈儿1-10] => Array ( [dir] => Array ( [F:开发测试 est9.14香奈儿1-102362_G_1338059108234.jpg] => Array ( [file] => Array ( [0] => F:开发测试 est9.14香奈儿1-102362_G_1338059108234.jpg20120526190

VB中判断数组维数

数组 设计思想:在VB中数姐最大维数是60,所以我们通过错误捕捉来处理这个问题,在这里我们用到UBound函数Public Function ArrayRange(mArray As Variant) As Integer Dim i As Integer Dim Ret As Integer Dim ErrF As Boolean ErrF = False On Error GoTo ErrHandle '判断代入的参数是否为数组 If Not IsArray(mArray) Then Arr

动态-java 如何生成一个不定维数的数组?

问题描述 java 如何生成一个不定维数的数组? 现有需求如下:有一个List集合,内含N个对象,每个对象都有一个属性level.如果最大的level是5,那么就生成一个4维数组:如果最大的level是4,那就生成一个3维数组,依此类推.想了很多办法,自己实现不了,特来求助 解决方案 你这个是N很大时怎么遍历的问题么?

java 二维数组-java中把两个维数相同的矩阵对应的元素相加得到新的矩阵的代码

问题描述 java中把两个维数相同的矩阵对应的元素相加得到新的矩阵的代码 java中把两个维数相同的矩阵对应的元素相加得到新的矩阵的代码怎么写,在int[][] add(int[][]a,int[][] b)中添加代码,实现这个功能 解决方案 循环不就行了,和遍历差不多.

VS2013下动态数组二维数组读二进制文件的问题

问题描述 VS2013下动态数组二维数组读二进制文件的问题 int samples_to_read = 7200; uint8_t **caculate_a; int count2,count3; caculate_a = (uint8_t **)malloc(sizeof(uint8_t *)* 3); for (count1 = 0; count1<3; count1++){ //动态数组分配空间 caculate_a[count1] = (uint8_t *)malloc(sizeof(u

visual studio 2010-如何用数组储存依次一串数的每个数字,如何数组中计数数字数

问题描述 如何用数组储存依次一串数的每个数字,如何数组中计数数字数 比如输入1010,怎么做让数组自动储存其中每个数,数组的数据类型应该是什么,然后如何统计数组里已经输了四个数?新手,谢谢. 解决方案 不用数组就可以了,我是用java的程序员,java中String,接收后,有自己的length属性,表示这个字符串有几个字符 解决方案二: 不用数组就可以了,我是用java的程序员,java中String,接收后,有自己的length属性,表示这个字符串有几个字符 解决方案三: #include

pca-关于PCA和KPCA的特征向量的维数问题~

问题描述 关于PCA和KPCA的特征向量的维数问题~ 想问一下PCA算出来的特征向量是和样本属性的维数一样,因为主成分是原来样本属性的线性组合,那么KPCA求出来的特征向量(利用核函数),为什么维数等于样本数呢?

c语言-sift算法中,需要建立高斯金字塔,但是每一阶梯的图片维数

问题描述 sift算法中,需要建立高斯金字塔,但是每一阶梯的图片维数 sift算法中,需要建立高斯金字塔,但是每一阶梯的图片维数不一样,导致动态分配难度增加.想向大家请教如何将多组的一层层的octave分配好内存. 下面是每一组和每一层的定义 typedef struct ImageSt { /*金字塔每一层*/ float levelsigma; float **Level; //每一层图像的象素值 } ImageLevels; /*typedef struct ImageSt1 { //金字

c-将a数组中的数依次取出分别与b数组中的数挨个相加得到新的数组再输出新数组的和

问题描述 将a数组中的数依次取出分别与b数组中的数挨个相加得到新的数组再输出新数组的和 5C 有数组a[ ]={12345}和数组b[ ]={12345},需要将a数组中的数依次取出分别与b数组中的数相加得到新的数组再输出新数组的和,即第一次将a中的1分别与b中的12345相加,得到[23456],输出为2+3+4+5+6=20;第二次为将a中的2分别与b中的12345相加,得到[34567],输出为3+4+5+6+7=25,之后类似,求用C/C++编写,急用,感激不尽!!! 解决方案 楼上的做