基本上,我将一些坐标保存在 2 个数组中,
arrayX
和 arrayY
。然后,我想更改保存在前面提到的数组中的坐标中“空白”矩阵的值。
将发布一个更简单的代码版本,以便您可以理解:
float* arrayX = 0;
float* arrayY = 0;
int array_size;
int width = 1440;
int height = 1080;
for (i=0;i<1234;i++){
if(flag==TRUE){
arrayX = realloc(arrayX, ++array_size * sizeof(*arrayX));
arrayY = realloc(arrayY, array_size * sizeof(*arrayY));
arrayX[array1_size-1] = i
arrayY[array1_size-1] = 100;
}
}
float *matrix1 = (float *)malloc(width * height * sizeof(float*));
for (i=0; i<width*height;i++){
*(matrix+i) = 0;
}
for (i=0; i<array_size; i++){
*(matrix1 + arrayY[l] * width + arrayX[l]) = 255; //ERROR HERE
}
这段代码给我这个错误:
error: invalid operands to binary + (have 'float *' and 'float')
我不明白为什么:
arrayY[l]
是float
指向的arrayY + l
。
*(matrix1 + float * int + float)
也应该是一个浮动。
我显然在这里搞砸了一些东西,我已经滚动到其他帖子的公平份额(关于如何分配矩阵,以及这个错误)并且不明白它/没有找到我'我在找。
我确定这是一个非常愚蠢的问题,并且有一个非常简单的解决方案。
对于初学者来说,这个声明中调用 malloc 的参数
float *matrix1 = (float *)malloc(width * height * sizeof(float*));
^^^^^^^^^^^^^^
不正确。看来你是说
float *matrix1 = (float *)malloc(width * height * sizeof(float));
^^^^^^^^^^^^^
指针和整型对象之间允许指针运算。然而在这个表达式中
*(matrix1 + arrayY[l] * width + arrayX[l])
你正在使用浮点类型的指针和对象。所以编译器发出错误信息。
来自 C11 标准(6.5.6 加法运算符)
2 对于加法,两个操作数都应具有算术类型, 或 one 操作数应是指向完整对象类型的指针,并且 其他应具有整数类型。 (递增相当于加 1.)
所以要么使用整数数组,要么至少使用转换作为例子
*(matrix1 + ( int )( arrayY[l] * width + arrayX[l] ))