相关疑难解决方法(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万
查看次数

在sockaddr和sockaddr_in之间进行转换

我遇到了一个套接字编程教程,其中引用了它

“指向结构sockaddr_in的指针可以转换为指向结构sockaddr的指针,反之亦然

我不明白如何将sockaddr_in强制转换为sockaddr。将Big类型的指针转换为Small类型的指针应具有UD行为。

struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};


struct sockaddr_in {
short int sin_family; // Address family, AF_INET
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
Run Code Online (Sandbox Code Playgroud)

如何不能强制转换?将它们相互投射是不安全的吗?

如果我有一个A类只有两个整数,而B类则只有4个整数。如果我有一个类型为B的指针并将其强制转换为类型A,那么请确保我可以获取前两个元素。但是,如果类A具有首先声明的2个字符和之后声明的2个整数,则指针将无法正确获取值,因为在这种情况下,对象布局将有所不同。

编辑1:

class Anu
{
public:
    char a;
    int b;
    Anu()
    {
        a='a';
    }
};
class Anurag
{ …
Run Code Online (Sandbox Code Playgroud)

c++ network-programming

4
推荐指数
2
解决办法
1810
查看次数

标签 统计

c ×2

casting ×2

struct ×2

c++ ×1

network-programming ×1