首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(rs_comm*)0)->ab[0]);

(rs_comm*)0)->ab[0]);
EN

Stack Overflow用户
提问于 2018-03-28 15:04:10
回答 3查看 152关注 0票数 0

xdn-项目/数字笔记 ./src/crypto/crypto.cpp文件中,编译(使用cmake)时在第338行有一个错误:

代码语言:javascript
复制
return sizeof(rs_comm) + pubs_count * sizeof(rs_comm().ab[0]);
                                                     ^

错误:值-不完全类型“Crypto::rs_comm::[]”的初始化

我在密码基础/密码上找到了解决方案

代码语言:javascript
复制
return sizeof(rs_comm) + pubs_count * sizeof(((rs_comm*)0)->ab[0]);

我可以很好地使用Java,但目前在C++需要帮助:)很高兴看到这个代码部分的详细说明:

代码语言:javascript
复制
sizeof(((rs_comm*)0)->ab[0]);

我的问题是:

  1. rs_comm后面的星号-它是干什么用的?
  2. 0) - 0在这里的目的是什么?

代码片段:

代码语言:javascript
复制
  struct rs_comm {
    Hash h;
    struct {
      EllipticCurvePoint a, b;
    } ab[];
  };

  static inline size_t rs_comm_size(size_t pubs_count) {
    return sizeof(rs_comm) + pubs_count * sizeof(rs_comm().ab[0]);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-28 15:24:38

大面积是返回特定类型大小的运算符。它可以直接处理类型或表达式。

这一部分(rs_comm*)0接受0 (0是一个有效的空指针常量),并将其转换为结构rs_comm的指针(或者类,我不知道rs_comm的定义,但我猜是这样)。

现在,它正在使用->操作符访问数据成员ab.ab必须定义为数组,因此它可以获得数组中的第一个项。

因为,size of并不能真正计算表达式,而只是计算出类型并得到它的大小。

因此,最后的结果是类/struct rs_comm数组ab中第一个元素的大小。

票数 1
EN

Stack Overflow用户

发布于 2018-03-28 15:26:01

因此,ab是struct rs_comm的成员,也是一个数组。

如果您有一个rs_comm对象,即rs_comm rs;,但是您不知道ab的类型,那么您想知道它的大小,sizeof(rs.ab[0])就可以了。

如果您有指向rs_comm的指针,即rs_comm *p_rs;,那么sizeof(p_rs->ab[0])将做同样的事情。

如果您没有rs_comm对象或指向rs_comm的指针,则可以将(空指针)更改为指向rs_comm的指针(),这是((rs_comm *)0)所做的。

sizeof(p_rs->ab[0])中的sizeof(p_rs->ab[0])替换为((rs_comm *)0),则得到sizeof(((rs_comm *)0)->ab[0])

票数 1
EN

Stack Overflow用户

发布于 2018-03-28 17:53:14

大小(变量)返回大小变量数据类型。就像char x;cout << sizeof(x)一样;结果将是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49538025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档