gpt4 book ai didi

c - 通过将结构体的地址获取到其他类型的结构体的指针来获取临时[-fpermissive]的地址

转载 作者:行者123 更新时间:2023-11-30 17:33:24 24 4
gpt4 key购买 nike

我定义了两个不同的typedef结构:datatype_2d_1和datatype_2d_2,它们基本上都有两个 double 作为成员,但它们的定义不同。现在我有一个变量数据类型 z1 和一个指针 datatype_2d_2 *z2,我希望 z2 指向 z1 的成员。该问题是由于连接两种不同的库数据类型而产生的。

我的代码如下所示:

// ** test3.cpp **

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

typedef struct {
double dat[2];
} datatype_2d_1;

typedef struct {
double real;
double imag;
} datatype_2d_2;

int main(){


datatype_2d_1 z1={{1.1,2.1}};
datatype_2d_2 *z2;

z2=( &(datatype_2d_2) {.real=z1.dat[0],.imag=z1.dat[1]} );

printf("\n\nz1.dat[0]=%lf\tz1.dat[1]=%lf\n",(z1).dat[0],(z1).dat[1]);
printf("(*z2).real=%lf\t(*z2).imag=%lf\n",z2->real,z2->imag);
return 0;
}

使用g++ test3.cpp -o test3编译时

我收到错误:

获取临时地址[-fpermissive]

最佳答案

由于您的结构具有相同的内存布局,因此您可以将 z2 设置为指向 z1 的指针。

datatype_2d_1 z1={{1.1,2.1}};
datatype_2d_2 *z2;

z2 = (datatype_2d_2*)&z1;

printf("nz1.dat[0]=%lf\tz1.dat[1]=%lf\n",(z1).dat[0],(z1).dat[1]);
printf("(*z2).real=%lf\t(*z2).imag=%lf\n",z2->real,z2->imag);

或者,如果您可以使用 union ,以便始终可以以任一格式访问相同的数据:

union data_both
{
datatype_2d_1 a;
datatype_2d_2 b;
};

datatype_2d_1 z1={{3.1,4.1}};

data_both both;

both.a = z1;

printf("both.a.dat[0]=%lf\tz1.dat[1]=%lf\n",both.a.dat[0],both.a.dat[1]);
printf("both.b.real=%lf\tboth.b.imag=%lf\n",both.b.real,both.b.imag);

关于c - 通过将结构体的地址获取到其他类型的结构体的指针来获取临时[-fpermissive]的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23758812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com