代码块上的未知错误
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 的 T
是 float[50]
所以 p 是指向该类型对象的指针
float ( *p )[50];
在这种情况下你可以写
p = matrix;