C++ 长双二维动态数组c++;

C++ 长双二维动态数组c++;,c++,compiler-errors,double,dynamic-arrays,C++,Compiler Errors,Double,Dynamic Arrays,错误:数组下标的类型“long double**[long double]”无效 long double** make2darray(long int V) { long double **array2,i; array2 = (long double**) malloc (V*sizeof(long double*)); for(i=0;i<V;i++) { array2[i] = (long double*) malloc (V*si

错误:数组下标的类型“long double**[long double]”无效

long double** make2darray(long int V)

{

    long double **array2,i;
    array2 = (long double**) malloc (V*sizeof(long double*));
    for(i=0;i<V;i++)
    {
        array2[i] = (long double*) malloc (V*sizeof(long double));
    }
return array2;

}
long double**make2darray(long int V)
{
长双**阵列2,i;
array2=(长双*)malloc(V*sizeof(长双*);

对于(i=0;i数组中的索引必须始终具有整数类型,您需要将声明更改为:

long double **array2;
size_t i;

C11标准(N1570)

6.5.2.1数组订阅(禁制)

  • 其中一个表达式的类型应为“指向完整对象类型的指针”,另一个表达式的类型应为 表达式应为整数类型,结果的类型为“type”

  • <>也可在C++中使用<代码> STD::向量或<代码> STD::数组< /COD>分别为可变长度数组或< P> > P>参见行< /P>
    long double **array2,i;
    
    您的变量
    i
    的类型为long double。浮点变量不能用于数组下标

    使用此代码

    long double **array2;
    size_t i;
    

    为什么在C++中使用<代码> MalCal< /Cord>?为什么不使用<代码> STD::vector < /代码>?同样,数组索引必须是一个整数类型,所以使<代码> i < />代码>代码>长int < /> >匹配<代码> v(这就是错误信息告诉你的)你写的数据类型——我猜你不知道你在这里做什么。在C++中,在初始化之前声明变量是最坏的风格。尤其对于<>代码> 循环,你应该考虑在最窄的范围内声明索引变量<代码> i>代码>:(int i=0;i+1
    数组中的索引必须始终具有整型
    。我以前没有尝试过这一点,令人惊讶!对于任何古代版本的C也是如此吗?@Wolf我不能代表古代C,但是现代C11标准明确规定其中一个表达式应具有指向完整对象类型的类型
    指针,另一个表达式是n应为整数类型,结果为type
    type
    。C标准非常模糊。“其中一个表达式…”允许使用像2[array2]这样奇怪的语句。