我定义了两个不同的typedef结构:datatype_2d_1和datatype_2d_2,它们都基本上有两个双数作为成员,但它们的定义不同。现在我有一个变量数据类型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]
的地址答案 0 :(得分:0)
试试这个:
datatype_2d_2 tmp = { .real = z1.dat[0], .imag = z1.dat[1] };
z2 = &tmp;
如果你想让z2指向z1,你可以试试这个:
z2 = (datatype_2d_2*)&z1;
答案 1 :(得分:0)
由于您的结构具有相同的内存布局,因此您可以使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 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);