问题标签 [struct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
3917 浏览

c++ - 取消引用结构中的可变大小数组

结构似乎是解析二进制数据块(即文件或网络数据包)的有用方法。在 blob 中有可变大小的数组之前,这很好而且很花哨。例如:

这使我可以找到最后一个数据字符:

问题是,我想要多个可变长度数组:

我不是手动分配这些结构。我有一个像这样的文件:

当我试图解析一个二进制文件(更具体地说是一个类文件)时。我已经用 Java 编写了一个实现(这是我的课堂作业),不,我正在用 C++ 编写个人版本,并希望无需编写 100 行代码就能摆脱困境。有任何想法吗?

谢谢,斯特凡

0 投票
5 回答
71073 浏览

c# - 将 C++ 结构数组编组为 C#

我在 C++ 中有以下结构:

以及我正在调用/调用的函数以获取其中 3 个结构的数组:

在 C++ 中,我会做这样的事情:

它会工作得很好,但在 C# 中我似乎无法让它工作。我创建了一个这样的 C# 结构:

如果我初始化其中 3 个数组(以及它们的所有子数组)并将其传递给它:

它返回成功,但 LPRData 数组中的数据没有改变。

我什至尝试创建一个大小为 3 个 LPRData 的原始字节数组,并将其传递给这样的函数原型:

获取数据(字节 [] 数据);

但在这种情况下,我将从第一个 LPRData 结构中获取“数据”字符串,但之后没有任何内容,包括来自同一 LPRData 的“prob”数组。

关于如何正确处理这个问题的任何想法?

0 投票
2 回答
19157 浏览

c - C中的N叉树

哪一个是 C 语言中 N-ary 树的简洁实现?

特别是,我想实现一个 n-ary 树,而不是自平衡树,每个节点中的子节点数量不限,其中每个节点都包含一个已经定义的结构,例如:

0 投票
2 回答
16497 浏览

c - 如何初始化指向结构的指针数组?

是否可以初始化指向结构的指针数组?就像是:

我想这样做是为了将实体放在不连续的内存中,并将指向它们的指针放在连续的内存中......但我不能使用动态内存,所以我想知道没有它是否可行。

0 投票
2 回答
1504 浏览

c# - C#:这是如何工作的:Unit myUnit = 5;

我刚刚注意到您可以在 C# 中执行此操作:

而不必这样做:

有谁知道我如何用自己的结构来实现这一点?我查看了带有反射器的 Unit 结构并注意到正在使用 TypeConverter 属性,但是在为我的结构创建自定义 TypeConverter 之后,我仍然无法让编译器允许这种方便的语法。

0 投票
3 回答
6247 浏览

c# - 从 C# 访问 Win32 C/C++ 结构成员

我正在使用某种挂钩从 C# 拦截 Win32 API 调用本机 dll 或 exe。在这种特殊情况下,我对 user32.dll 中的 DrawText() 感兴趣。在 Win32 API 中是这样声明的:

LPRECT 结构具有以下签名(也在 Win32 API 中):

LONG 是 32 位系统上 32 位整数的 typedef(不了解 64 位系统,此时无关紧要,因为我在 32 位 Windows 上)。为了能够访问这个结构的成员,我在我的 C# 代码中声明了它......

...并使用此 RECT 结构编写了 P/Invoke 的签名:

由于结构是 C# 中的值类型,而不是 C/C++ 中的引用类型,因此此处需要 ref 修饰符。

但是,当我使用rect.top rect.leftetc 时,它们几乎总是返回 0。我知道这是不正确的事实。但是在谷歌搜索了无数小时并尝试了很多不同的东西之后,我无法让这个简单的东西发挥作用。

我尝试过的事情:

  • 对 RECT 成员使用不同的原语(int、long、short、UInt32...)。实际上很明显这不是类型问题,因为无论如何我应该看到一些乱码,而不是 0。
  • 删除 ref 修饰符。这也是愚蠢的(绝望的时候,绝望的措施),因为 rect.left 正确地返回指向 rect 的指针而不是它的值。
  • 尝试过unsafe的代码块。没用,但我可能在实现中犯了一个错误(我不记得我做了什么)。除了这种方法通常保留用于 COM 和 Win32 中棘手的指针情况,无论如何,这对我的情况来说是多余的。
  • 尝试[MarshallAs]在 RECT 成员之前添加。没区别。
  • 玩弄Pack价值观。没有不同。

我相当确定我错过了一些非常简单直接的东西,但我不知道它是什么......

任何帮助表示赞赏。谢谢你。

0 投票
6 回答
73585 浏览

c - 为什么我们不能在结构中初始化成员?

为什么我们不能在结构中初始化成员?

例子:

0 投票
4 回答
2336 浏览

c++ - C ++:结构的ctors?

C ++:由于结构是具有“公共”所有内容的类,因此是否创建并调用了默认-ctors?

我问的原因是要了解使用结构时 C++ 可能比 C 产生的开销(如果有的话)。我听到的一个观点是,在 C++ 中,类有一些结构没有的开销,但我对此表示怀疑。

0 投票
15 回答
599184 浏览

c - 为什么我们要在 C 中如此频繁地对结构进行 typedef 呢?

我见过许多由如下结构组成的程序

为什么经常需要它?有什么具体原因或适用范围吗?

0 投票
6 回答
55568 浏览

c - 将结构的指针/引用传递给函数

这听起来像是一个愚蠢的问题,但我还在学习 C,所以请多多包涵。:)

我正在编写 K&R(结构)的第 6 章,到目前为止,这本书已经取得了巨大的成功。我决定大量使用结构,因此在本章的开头用 point 和 rect 示例做了很多工作。我想尝试的一件事是canonrect通过指针更改函数(第 2 版,第 131 页)工作,因此返回void

我有这个工作,但遇到了一个小问题,我希望你们能帮助我。我想canonRect创建一个临时矩形对象,执行它的更改,然后将它传递给临时矩形的指针重新分配,从而简化代码。

但是,如果我这样做,矩形不会改变。相反,我发现自己手动重新填充了我传入的矩形字段,这确实有效。

代码如下:

所以这里有问题:

  1. 为什么不r = &temp;工作?(我认为这是因为我传入了引用而不是指针;我认为引用不可修改但指针是正确的吗?)
  2. 如果我尝试传递指向 的指针,为什么会出现非法间接编译时错误canonRect?(即,如果我有的话canonRect(*r);main()

我怀疑我已经知道#1 的答案,但#2 让我感到困惑——我认为传递指针是合法的。

无论如何...请原谅C新手。