代码块上的未知错误

Unknown error on CodeBlocks

我是编程初学者,我开始习惯 C/C++。在尝试执行我在练习中找到的代码时,出现此错误。如果有人能提供帮助,我将不胜感激。

float matrx [50][50];
float *p;
p = matrx;
int i,j;
for (i=0; i<50; i++)
    for (j=0; j<50; j++)
        p[i][j]=0.0;
printf("%f",p[2][2]);
return(0);

显示的错误是: "error: subscripted value is neither array nor pointer nor vector."

p 是指向浮点数的指针。为了使您的代码正常工作,p 必须是指向浮点数组的指针:

   float (*p)[50];
   p = matrx;

注意 float **p; 是错误的,因为数组与 C 中的指针不同,二维数组与指向指针的指针不同。

我假设练习的重点是展示这一点。否则,您可以跳过p,直接使用matrx

float matrx [50][50]float *p 是非常不同的东西。稍微更改您的代码就可以正常工作:

float p[50][50];
int i,j;
for (i=0; i<50; i++)
    for (j=0; j<50; j++)
        p[i][j]=0.0;
printf("%f",p[2][2]);
return(0);

如果你有这样的指针

T *p;

其中 T 是某种类型然后 p[i] 其中 i 是某种索引是类型 T.

的对象

因此相对于您的代码,如果您定义指针

float *p;

那么 p[i] 已经是 float 类型的对象,您可能无法对其应用 p[i][j].

等下标运算符

在 C++ 和 C 中,多维数组实际上是一维数组,其元素又是数组。

所以如果你有声明

float matrx [50][50];

然后使用 typedef 你可以写

typedef float T[50];

T matric[50];

相应的指针看起来像

T *p = matrix;

其中来自 typedef 的 Tfloat[50]

所以 p 是指向该类型对象的指针

float ( *p )[50];

在这种情况下你可以写

p = matrix;