使用动态 float* 数组和动态矩阵匹配数据类型的问题

问题描述 投票:0回答:1

基本上,我将一些坐标保存在 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)
也应该是一个浮动。

我显然在这里搞砸了一些东西,我已经滚动到其他帖子的公平份额(关于如何分配矩阵,以及这个错误)并且不明白它/没有找到我'我在找。

我确定这是一个非常愚蠢的问题,并且有一个非常简单的解决方案。

c compiler-errors floating-point pointer-arithmetic
1个回答
0
投票

对于初学者来说,这个声明中调用 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] ))
© www.soinside.com 2019 - 2024. All rights reserved.