更改下一个指向结构的值

标签 c pointers 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...

是合法的。

EDIT2

只是一个装饰/可读性点:

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

相当于

currTable[1]->offset...

更具可读性和直观性(类似于arr,可以像arr[1]->offset...一样使用)

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

相关文章:

c - swift3.0 无法将类型 '[UnsafeMutablePointer<Int8>]' 的值转换为预期的参数类型 'UnsafeMutablePointer<Int8>?'

c++ - 具有不同参数的对象工厂

c++ - 在模板类中设置函数指针的问题

c - 在C中使用单个结构来存储不同的结构并作为索引访问它们

从 gcc 到 Visual Studio Express 2010 的 C 代码

c - '[' 标记之前的汇编语言解析错误

c - 内联 Hook 后 'pathname' 系统调用中 'mkdir()' 参数的内容不可读

c - 如何在事先不知道长度的情况下在 C 中创建数组?我不能假设系统将使用任何特定标准

c - C 中的内存分配器——如何利用 sbrk() 的空间

C 链表显示内容