我有一个指向struct的指针:

typedef struct Tables_s
{
    uint8 type;                                 /*from StatisticType_e*/
    uint16 offset;                              /*offset from start of   buffer*/
} Tables_t;

具有成员偏移量并定义为:
Tables_t Table;
Tables_t Table1;

然后指着:
Tables_t *currTable;
currTable = Table;

这是数组中的许多结构之一:
arr[0] = &Table;
arr[1] = &Table1;

我可以通过执行以下操作来更改列表中的下一个结构吗?
(currTable+1)->offest

最佳答案

如果currTable指向Tables_t(不是Tables_t*)数组的元素,并且它不是数组中的最后一个元素,则访问cuurentTable + 1是正常的。您也可以通过cuurentTable[1]访问它。
数组保证结构存储在连续内存中。
编辑
这个问题更新了更多的细节,所以我相应地更新了下面的答案。
因为currTable指向Table这是一个局部变量(甚至是全局变量),所以currTable + 1是未定义的。
如果问题中描述的情况currTable应该Tables_t**

Tables_t** currTable = arr;

那么
(*(currTable+1))->offset...

是合法的。
编辑2
只是一个装饰/可读性点:
(*(currTable+1))->offset...

相当于
currTable[1]->offset...

更具可读性和直观性(类似于arr,可用于arr[1]->offset...

关于c - 更改下一个指向的结构的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32678994/

10-11 21:57
查看更多