二维数组和指针问题

时间:2018-07-26 16:17:11

标签: c pointers multidimensional-array memory-address datareader

我正在使用 ublox m8t 进行一个项目,我正在阅读几个软件包,其中一个是 sfrbx

capybara-webkit

struct buffer { // The buffer's length are overestimated u_int8_t rawbuf[1024]; //THE LENGTH IS UNKNOW, PROB AROUND 300BYTES u_int8_t clkbuf[NAVCLOCK_LENGTH+10]; u_int8_t navposbuf[NAVPOSLLH_LENGTH+10]; u_int8_t navpvtbuf[NAVPVT_LENGTH + 10]; u_int8_t sfrb[16][1024]; }; 是我们正在讨论的二维数组。

阅读包后,我将其传递给函数进行处理。


功能委托:

sfrb

Function.c:

void decode_rxmsfrb(u_int8_t rawbuf[][],struct rxmsfrbx *ptrsubframe[], int n);

主函数调用:

void decode_rxmsfrb(u_int8_t sfrbx[][], struct rxmsfrbx *ptrsubframe[], int n)
{
    int i,j;
    unsigned char sv = = *((unsigned char*)&sfrbx[j][1]);

    for(j=0; j<n;j++){
        ptrsubframe[sv]->gnssid = *((unsigned char*)&sfrbx[j][0]);
        ptrsubframe[sv]->svid = *((unsigned char*)&sfrbx[j][1]);
        ptrsubframe[sv]->reserverd1 = *((unsigned char*)&sfrbx[j][2]);
        ptrsubframe[sv]->freqid = *((unsigned char*)&sfrbx[j][3]);
        ptrsubframe[sv]->N = *((unsigned char*)&sfrbx[j][4]);
        ptrsubframe[sv]->reserverd2 = *((unsigned char*)&sfrbx[j][5]);
        ptrsubframe[sv]->version = *((unsigned char*)&sfrbx[j][6]);
        ptrsubframe[sv]->reserverd3 = *((unsigned char*)&sfrbx[j][7]);

        /* Now we have to read the subframe and then parse it */
        for(i=0; i<ptrsubframe[sv]->N;i++){
            ptrsubframe[sv]->dword[i] = *((unsigned int*)&sfrbx[j][8+4*i]);
        }
    }
}

问题在于我猜编译器不喜欢decode_rxmsfrb(bufinformation0.sfrb, &subframe,k); ,因为它试图映射内存的2个不同区域(sfrbx[j][8+4*i]);J)。

当我对普通数组使用这种寻址方式时,像这样:

8+4*i

有效。

为什么会出现此问题?

编辑解决方案:void encode_rxmsfrb(u_int8_t rawbuf [16] [1024],struct rxmsfrbx * ptrsubframe [],int n);

0 个答案:

没有答案