C 结构体指针从第一个元素到最后一个元素

标签 c pointers struct

提供结构测试:

#include <stdio.h>

int main() {

   struct {
      char* one;
      char* two;
      char* three;
    } test;

    char **ptr = &test.one;
    *ptr = "one";
    *++ptr = "two";
    *++ptr = "three";

    printf ("%s\n", test.one);
    printf ("%s\n", test.two);
    printf ("%s\n", test.three);
}

问题:是否可以保证 test 结构中的元素始终处于连续的内存顺序? (因此从第一个结构元素 ++ptr 开始将始终指向 test 结构中的下一个元素?)

最佳答案

对于指针,您肯定会始终观察到这种行为,但 C 语言所做的唯一保证是元素在内存中是有序的。之间可能存在间隙以优化字段的对齐(为了性能,特别是在 RISC 架构上)。

正确的方法是使用 offsetof 宏,或者将其设为数组。

关于C 结构体指针从第一个元素到最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929519/

相关文章:

c - GNU 代码风格的 GNU 缩进问题

python - 将 Python 字典转换为类 C 结构

c++ - 如何通过指针更改类成员值

go - 将配置结构加载到go后,访问嵌套属性的问题

c - 访问另一个结构中的结构字段

c - 表达式必须有一个指向 C 中对象类型的指针

c - gnuplot 窗口不显示

c++ - 我们可以检查一个指针以确保它是一个有效地址吗?

c - 动态访问结构体的成员变量

c - c头文件中的静态结构声明和初始化