c++ - 如何将数据推送到 C++ 中的第二个位置

标签 c++ casting struct

假设我有以下程序,

 typedef struct xyz
    {
    int abc[6];//int abc;
    //int yz;
    }xyz;
    int main()
    {
    int *ptr = new int(10);
    int *ptr1 = new int(20);

    xyz* XYZ = reinterpret_cast <xyz*>(ptr); //Initializes XYZ->abc[0]
    XYZ = reinterpret_cast <xyz*>(ptr1);//Initializes XYZ->abc[0]

    }

此处值进入第零位置。如果我想将值插入 XYZ->abc[1],我该怎么做?

最佳答案

也许你想做

 XYZ = reinterpret_cast<xyz*> (ptr1+1);

但这种代码很恶心,它可能是一个未定义的行为(因为ptr1+1 可能不是一个有效的位置,你可能会得到一个 segmentation fault ) ,所以你应该避免这样做。

我其实不明白你的问题的动机(和用例)。

也许您想在堆上分配十个整数。然后代码

int *ptr = new int[10];

并且不要忘记初始化它们,例如使用 memset (ptr, 0, sizeof(int)*10);

在 Linux 系统上,我强烈建议使用 g++ -Wall -g 进行编译,并使用 valgrindgdb 来调试您的程序。您真的很想了解这些工具。

关于c++ - 如何将数据推送到 C++ 中的第二个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727154/

相关文章:

go - 如何为谷歌自动生成的库初始化一个包含 slice 的结构

c - 如何使用结构体、malloc 和数组为以下 C 函数编写代码?

c++ - 在 C++ 中缓存昂贵的数据——函数范围的静态变量与可变成员变量

c++ - 安装SFML之后Visual Studio 2015中的错误

python - shared_ptr<QCoreApplication> 崩溃

c - 我是否要转换 malloc 的结果?

c++ - 添加或不添加 Qt Libs 和 Headers 到项目目录

java.lang.ClassCastException : java. lang.Float 无法转换为 java.lang.String

c++ - reinterpret_cast<char*>(p) 或 static_cast<char*>((void*)p)) 用于字节指针差异,哪个更好?

c - 为什么 *ptr.member 错误而 (*ptr).member 正确?