相关疑难解决方法(0)

将一个C结构铸造成另一个

我有两个相同(但命名不同)的C结构:

typedef struct {
      double x;
      double y;
      double z;
} CMAcceleration;


typedef struct {
    double x;
    double y;
    double z;   
} Vector3d;
Run Code Online (Sandbox Code Playgroud)

现在我想将一个CMAcceleration变量赋给一个Vector3d变量(复制整个结构).我怎样才能做到这一点?

我尝试了以下但是得到了这些编译错误:

vector = acceleration;           // "incompatible type"
vector = (Vector3d)acceleration; // "conversion to non-scalar type requested"
Run Code Online (Sandbox Code Playgroud)

当然,我可以单独设置所有成员:

vector.x = acceleration.x;
vector.y = acceleration.y;
vector.z = acceleration.z;
Run Code Online (Sandbox Code Playgroud)

但这似乎很不方便.

什么是最好的解决方案?

c struct casting

41
推荐指数
6
解决办法
4万
查看次数

将一个结构指针转换为另一个 - C

请考虑以下代码.

enum type {CONS, ATOM, FUNC, LAMBDA};

typedef struct{
  enum type type;
} object;

typedef struct {
  enum type type;
  object *car;
  object *cdr;
} cons_object;

object *cons (object *first, object *second) {
  cons_object *ptr = (cons_object *) malloc (sizeof (cons_object));
  ptr->type = CONS;
  ptr->car = first;
  ptr->cdr = second;
  return (object *) ptr;
}
Run Code Online (Sandbox Code Playgroud)

cons函数中,变量ptr是类型cons_object*.但是在返回值中它被转换为类型object*.

  1. 我想知道这是怎么可能的,因为cons_objectobject是不同的结构.
  2. 做这样的事情有什么问题吗?

有什么想法吗!

c struct casting

27
推荐指数
3
解决办法
2万
查看次数

为什么将无符号转换为直接用C签名会得到正确的结果?

在C中,有符号整数和无符号整数在内存中的存储方式不同.当类型在运行时清除时,C还隐式转换有符号整数和无符号整数.但是,当我尝试以下代码段时,

#include <stdio.h>

int main() {    
    unsigned int a = 5;
    signed int b = a;
    signed int c = *(unsigned int*)&a;
    signed int d = *(signed int*)&a;

    printf("%u\n", a);
    printf("%i\n", b);
    printf("%i\n", c);
    printf("%i\n", d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

5
5                   //Implicit conversion occurs
5                   //Implicit conversion occurs, because it knows that *(unsigned int*)&a is an unsigned int
[some crazy number] //a is casted directly to signed int without conversion
Run Code Online (Sandbox Code Playgroud)

然而,实际上,它输出

5
5
5
5
Run Code Online (Sandbox Code Playgroud)

为什么?

c c++ unsigned-integer

-1
推荐指数
1
解决办法
107
查看次数

标签 统计

c ×3

casting ×2

struct ×2

c++ ×1

unsigned-integer ×1