CodeBlocks上的未知错误

时间:2015-04-09 14:19:18

标签: c++ 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);

显示的错误是: &#34;错误:下标值既不是数组也不是指针,也不是向量。&#34;

3 个答案:

答案 0 :(得分:3)

p是指向float的指针。为了让你的代码工作,p必须是float数组的指针:

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

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

我认为练习的目的是表明这一点。否则,您可以跳过p,直接使用matrx

答案 1 :(得分:1)

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);

答案 2 :(得分: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;