我是编程的开始,我开始习惯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;
答案 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的T
是float[50]
所以p是指向这种类型的对象的指针
float ( *p )[50];
在这种情况下,您可以写
p = matrix;