标签: struct

我什么时候应该使用Struct vs. OpenStruct?

总的来说,与Struct相比,使用OpenStruct有什么优缺点?什么类型的一般用例适合这些?

ruby struct

179
推荐指数
7
解决办法
6万
查看次数

159
推荐指数
6
解决办法
13万
查看次数

在C中按值传递结构是否有任何缺点,而不是传递指针?

在C中按值传递结构是否有任何缺点,而不是传递指针?

如果结构很大,显然存在复制大量数据的性能方面,但对于较小的结构,它应该基本上与将多个值传递给函数相同.

当用作返回值时,它可能更有趣.C只有函数的单个返回值,但是你经常需要几个.所以一个简单的解决方案是将它们放在一个结构中并返回它.

是否有任何理由支持或反对这一点?

因为对于每个人来说,我在这里谈论的内容可能并不明显,所以我举一个简单的例子.

如果您使用C编程,您迟早会开始编写如下所示的函数:

void examine_data(const char *ptr, size_t len)
{
    ...
}

char *p = ...;
size_t l = ...;
examine_data(p, l);
Run Code Online (Sandbox Code Playgroud)

这不是问题.唯一的问题是你必须同意你的同事的参数顺序,所以你在所有功能中使用相同的约定.

但是当你想要返回相同类型的信息时会发生什么?你通常得到这样的东西:

char *get_data(size_t *len);
{
    ...
    *len = ...datalen...;
    return ...data...;
}
size_t len;
char *p = get_data(&len);
Run Code Online (Sandbox Code Playgroud)

这很好,但问题更多.返回值是返回值,但在此实现中它不是.从上面没有办法说明函数get_data不允许查看len指向的内容.并且没有任何东西可以使编译器检查实际通过该指针返回的值.那么下个月,当其他人修改代码时却没有正确理解它(因为他没有阅读文档?)它会在没有人注意的情况下破坏,或者随机开始崩溃.

所以,我提出的解决方案是简单的结构

struct blob { char *ptr; size_t len; }
Run Code Online (Sandbox Code Playgroud)

这些例子可以像这样重写:

void examine_data(const struct blob data)
{
    ... use data.tr and data.len ...
}

struct blob = { .ptr = ..., .len = ... };
examine_data(blob); …
Run Code Online (Sandbox Code Playgroud)

c struct parameter-passing abi

153
推荐指数
9
解决办法
7万
查看次数

内置函数'malloc'的隐式声明不兼容

我收到这个错误:

警告:内置函数'malloc'的不兼容隐式声明

我想这样做:

fileinfo_list* tempList = malloc(sizeof(fileinfo_list));
Run Code Online (Sandbox Code Playgroud)

仅供参考,手头使用的结构是:

typedef struct {
    fileinfo** filedata;
    size_t nFiles;
    size_t size;
    size_t fileblock;
} fileinfo_list;
Run Code Online (Sandbox Code Playgroud)

我没有看到我所做的事情有什么不妥.我只是创建一个tempList1 x的大小fileinfo_list.

c malloc struct

147
推荐指数
4
解决办法
15万
查看次数

我如何默认公开Swift中结构的成员初始化器?

我有一个定义结构的快速框架:

public struct CollectionTO {
    var index: Order
    var title: String
    var description: String
}
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法使用另一个导入库的项目中的隐式成员智能初始化程序.错误是'CollectionTO'无法初始化,因为它没有可访问的初始化程序.即它没有给出默认的隐式成员明智的初始化者public关键字.

var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")
Run Code Online (Sandbox Code Playgroud)

我必须添加我自己的init方法,如下所示:

public struct CollectionTO {
    var index: Order
    var title: String
    var description: String

    public init(index: Order, title: String, description: String) {
        self.index = index;
        self.title = title;
        self.description = description;
    }

}
Run Code Online (Sandbox Code Playgroud)

...但是如果还有其他人知道的话,我宁可不要这样做?

struct initialization swift

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

方便的C++ struct初始化

我正在尝试找到一种方便的方法来初始化'pod'C++结构.现在,考虑以下结构:

struct FooBar {
  int foo;
  float bar;
};
// just to make all examples work in C and C++:
typedef struct FooBar FooBar;
Run Code Online (Sandbox Code Playgroud)

如果我想在C(!)中方便地初始化它,我可以简单地写:

/* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C
Run Code Online (Sandbox Code Playgroud)

请注意,我想明确地避免使用以下表示法,因为如果我将来更改结构中的任何内容,它会让我感到沮丧:

/* B */ FooBar fb = { 12, 3.4 }; // legal C++, legal C, bad style?
Run Code Online (Sandbox Code Playgroud)

为了实现与/* A */示例中相同(或至少类似)的C++ ,我将不得不实现一个愚蠢的构造函数:

FooBar::FooBar(int foo, float bar) : foo(foo), bar(bar) {}
// -> …
Run Code Online (Sandbox Code Playgroud)

c++ struct initialization

137
推荐指数
6
解决办法
11万
查看次数

无法修改返回值错误c#

我正在使用自动实现的属性.我想解决以下问题的最快方法是声明我自己的支持变量?

public Point Origin { get; set; }

Origin.X = 10; // fails with CS1612
Run Code Online (Sandbox Code Playgroud)

错误消息:无法修改'expression'的返回值,因为它不是变量

尝试修改作为中间表达式结果的值类型.由于该值未持久存在,因此该值将保持不变.

要解决此错误,请将表达式的结果存储在中间值中,或使用中间表达式的引用类型.

c# variables struct immutability

136
推荐指数
4
解决办法
8万
查看次数

在C中将一个结构分配给另一个

你可以将一个结构的一个实例分配给另一个,如下所示:

struct Test t1;
struct Test t2;
t2 = t1;
Run Code Online (Sandbox Code Playgroud)

我看到它适用于简单的结构,它是否适用于复杂的结构?
编译器如何知道如何根据类型复制数据项,即区分int和字符串?

c struct

134
推荐指数
5
解决办法
15万
查看次数

为什么声明一个只包含C中数组的结构?

我遇到了一些包含以下内容的代码:

struct ABC {
    unsigned long array[MAX];
} abc;
Run Code Online (Sandbox Code Playgroud)

何时使用这样的声明是有意义的?

c arrays struct coding-style

129
推荐指数
5
解决办法
6988
查看次数

自引用结构定义?

我没有写C很长时间,所以我不确定我应该怎么做这些递归的东西...我希望每个单元格包含另一个单元格,但我得到一个错误沿着"田地'孩子'的行具有不完整的类型".这是怎么回事?

typedef struct Cell {
  int isParent;
  Cell child;
} Cell;
Run Code Online (Sandbox Code Playgroud)

c recursion struct typedef

126
推荐指数
6
解决办法
10万
查看次数