gpt4 book ai didi

c - 返回二维数组中的值

转载 作者:行者123 更新时间:2023-11-30 16:51:44 26 4
gpt4 key购买 nike

我有一个函数,它从一维 vector 中获取信息并将其从数组中分成 8 列:

void ochoCanales(unsigned char * data)
{
UINT64 INTEGRATE1 = 0, INTEGRATE2 = 0, P, Q;
P = 0, Q = 0;
double ** adc_val;
adc_val = (double *)malloc(8 * sizeof(double*));
int u;
for (u = 0;u < 8 + 1;u++)
{
adc_val[u] = (double *)malloc(VER_LENGTH*BUFFER_ADC / 8 * sizeof(double *));
}

while (P + 1 <= BULK_BUFFER_SIZE)
{
INTEGRATE1 = data[P + 7];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 6];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 5];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 4];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 3];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 2];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 1];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P];
INTEGRATE2 = data[P + 15];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 14];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 13];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 12];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 11];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 10];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 9];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 8];
P = P + 16;

adc_val[0][Q] = (INTEGRATE1 & 0x000000000000FFFF);
adc_val[1][Q] = (INTEGRATE1 & 0x00000000FFFF0000) >> 16;
adc_val[2][Q] = (INTEGRATE1 & 0x0000FFFF00000000) >> 32;
adc_val[3][Q] = (INTEGRATE1 & 0xFFFF000000000000) >> 48;
adc_val[4][Q] = (INTEGRATE2 & 0x000000000000FFFF);
adc_val[5][Q] = (INTEGRATE2 & 0x00000000FFFF0000) >> 16;
adc_val[6][Q] = (INTEGRATE2 & 0x0000FFFF00000000) >> 32;
adc_val[7][Q] = (INTEGRATE2 & 0xFFFF000000000000) >> 48;
Q++;
INTEGRATE1 = 0; INTEGRATE2 = 0;
}
return adc_val;
}

在主代码中我有这个静态数组;尺寸与adc_val相同:

double adc_val1[CAN_CANALES][(VER_LENGTH*BUFFER_ADC)/CAN_CANALES];

在主代码中我想做这样的事情:

adc_val1 = ochoCanales(szBufferM);

但我收到错误:

Expression must be modifiable value (adc_val1)

为什么会发生这种情况?我该如何解决这个问题?

最佳答案

这里有几个问题。首先 - 您的函数是 void 类型,因此它不会返回任何内容。如果您想返回 adcval1 - 您应该更改签名以表明 -

double ** ochoCanales(unsigned char * data)

更重要的是 - 因为在你的主代码中你已经静态分配了一个 2D 数组

double adc_val1[CAN_CANALES][(VER_LENGTH*BUFFER_ADC)/CAN_CANALES];

这意味着:

  1. 您无法分配给 adc_val1 - 而且您也不想这样做。 adc_val1 指向某个内存块,如果您要为其分配另一个 block - 第一个内存块将会丢失。

  2. 无需在函数内分配更多内存 - 您已经为数组预留了内存。所以你不需要:

    for (u = 0;u < 8 + 1;u++)
    {
    adc_val[u] = (double *)malloc(VER_LENGTH*BUFFER_ADC / 8 * sizeof(double *));
    }

现在,您真正想要做的是传入您事先分配的 adc_val1,并用您的值填充它

//replace sizeRow, sizeCol with the actual sizes
void ochoCanales(unsigned char * data, double arr[sizeRow][sizeCow])
{
UINT64 INTEGRATE1 = 0, INTEGRATE2 = 0, P, Q;
P = 0, Q = 0;
int u;

while (P + 1 <= BULK_BUFFER_SIZE)
{
//The rest of your code
}
}

关于c - 返回二维数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com