加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在两个等价的C结构之间转换

发布时间:2020-12-16 09:49:05 所属栏目:百科 来源:网络整理
导读:参见英文答案 Casting one C structure into another????????????????????????????????????8个 编译以下代码时: struct Point { int x; int y;};struct Position { int x; int y;};struct Point p = {1,2};struct Position q = (struct Position)p; 发生错
参见英文答案 > Casting one C structure into another????????????????????????????????????8个
编译以下代码时:

struct Point {
    int x;
    int y;
};
struct Position {
    int x;
    int y;
};
struct Point p = {1,2};
struct Position q = (struct Position)p;

发生错误:

error: used type ‘struct Position’ where arithmetic or pointer type is
required

当这些结构实际上具有相同的定义时,是否有某种方式在不同的结构实例之间进行转换?

解决方法

对于C语言中的结构类型,没有“cast”这样的东西. C语言仅支持标量类型的转换和void.

当在()内使用任何其他类型时,它不再是强制转换.它只能作为复合文字语法的一部分有效.复合文字是C语言的完全不同的特征,与任何演员表无关.例如,这是正确的

struct Position q = (struct Position) { 1,2 };

在您的情况下,您显然需要重新连接序列

q = *(struct Position *) &p;

C语言声明这种访问被认为是有效的,只要您的结构声明确实是同步的.您还可以考虑简单地将一个对象存储到另一个对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读