c++ - 使用单个指针访问连续成员

标签 c++

我想使用单个指针访问连续声明的相同类型的成员数组。

所以对于 example说我有:

struct S 
{
    double m1[2];
    double m2[2]; 
}

int main()
{
    S obj; 
    double *sp = obj.m1;

    // Code that maybe unsafe !!
    for (int i(0); i < 4; ++i)
        *(sp++) = i; // *

    return 0;
}

什么情况下(*)行会出现问题?

我知道存在虚拟函数时肯定会出现问题,但我需要一个比我的假设更结构化的答案

最佳答案

您可以确定结构体的成员按照它们出现的顺序存储在连续的字节 block 中。此外,数组的元素是连续的。所以,看起来一切都很好。
这里的问题是没有标准方法来知道结构中连续成员之间是否存在填充字节。
因此,假设根本不存在填充字节是不安全的。

如果出于某种特定原因,您可以非常确定不存在填充字节,那么 4 个 double 元素将如您所愿是连续的。

关于c++ - 使用单个指针访问连续成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24825646/

相关文章:

c++ - 在 C++ 项目中调用二进制可执行文件

c++ - 在定义之前立即声明函数的原因?

C++ 变量未正确实例化

c++ - 在目录路径中使用 shell 符号

c++ - 为枚举索引数组重载 std::get

C++ 获取注册表项只返回一个字符

c++ - 使用 gluPerspective()

c++ - 如何从 Mat 变量编辑/读取 OpenCv 中的像素值?

C++ cout 字符串打印其内存值

c++ - 跟踪线程创建点以进行调试