【问题标题】:error: invalid types ‘double[unsigned int]’ for array subscript错误:数组下标的无效类型“double [unsigned int]”
【发布时间】:2021-02-25 03:03:49
【问题描述】:

*当我调用用户定义函数时,我收到以下错误:`

    error: invalid types ‘double[unsigned int]’ for array subscript
       44 |    C[i][j]=0; 
    ...

用户定义代码

void Matrix(const double * A, const double *B, double * C){
    

   for(unsigned int i=0;i < 4;i++)    
    {    
        for(unsigned int j=0;j < 4;j++)    
        {    
            C[i][j]=0;    
                for(unsigned int k=0;k < 4;k++)    
                {    
                    C[i][j]+=A[i][k]*B[k][j];    
                }    
        }    
    }   
    

    
}   

我们将不胜感激。

【问题讨论】:

  • C 的类型为 double*。那么C[i] 就是double。那么C[i][j] 就没有意义了。
  • @IgorTandetnik double * C 不能用来定义矩阵?
  • 嗯,就 C++ 编译器而言,double* C 是一个指向 doubles 数组的指针。如果您的代码想要将其解释为矩阵,则由该代码为每个元素计算到该数组的适当偏移量。
  • @IgorTandetnik 我明白了,我们在 C++ 中使用指针

标签: c++ c pointers


【解决方案1】:
const double * A

这是一个指向 double 对象的指针。

A[i]

这个表达式使用下标运算符来间接通过指针。结果值是同一 double 对象数组中指向的 double 对象的兄弟。

A[i][k]

这使用您从第一个下标运算符获得的double 对象上的下标运算符。该语言没有这样的运算符,因此程序格式错误。这同样适用于您的其他指针。

【讨论】:

  • 如何使用 double * C 定义这样的循环?
  • @BirdANDBird 不清楚你所说的“这样的循环”是什么意思。
  • C[i][j]+=A[i][k]*B[k][j];
  • @BirdANDBird 正如我在回答中解释的那样,您不能使用指向 double 的指针来执行此操作。因此,您不能“使用此类指针”“定义此类循环”。
猜你喜欢
  • 1970-01-01
  • 2012-11-04
  • 2016-05-05
  • 2015-09-26
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多