Tag: 结构

将结构数组初始化为全0的最快方法?

我正在尝试使用以下语法将结构数组初始化为全0: STRUCTA array[MAX] = {0}; 但是,我从gcc收到以下警告: 警告:初始化程序周围缺少大括号 我做错了什么 – 有另一种/更好的方法吗?

我可以’扩展’C中的结构吗?

typedef struct foo_s { int a; } foo; typedef struct bar_s { foo; int b; } bar; 基本上我想做: bar b; ba; 我知道如果我在bar中命名了foo结构,我可以做b.foo_name.a,但我不想这样做。 有什么办法吗? 这个问题得到了各种不同的答案,所以让我解释一下这个问题。 我想这样做的原因是因为我有一个我需要适应我的情况的库,这意味着我无法修改原始的struct decleration。 此外,我需要做的是在结构的开头添加1项(为什么开始?因为我有一个’对象’结构,它负责项目中的所有结构)。 我可以像你提到的那样简单地嵌入结构但它真的很烦人,因为所有的引用都需要输入’variable-> image.location’那个’image’。 键入十亿种类型真的很烦人。

结构的成员是否允许静态?

#include struct str { static int a ; int b ; } s ; int main() { static int p , k ; printf(“%d %d”,sizeof(p),sizeof(s)); getchar(); return 0; } 上面的代码给出了错误。 但是,如果我将结构的第一个成员重新定义为’int’而不是’static int’,那么它运行正常。 为什么静态成员不允许进入结构中,它的意义何在?

C中的结构和铸造

我在想: 如果我有结构定义,例如,像这样: struct Base { int foo; }; struct Derived { int foo; // int foo is common for both definitions char *bar; }; 我可以这样做吗? void foobar(void *ptr) { ((struct Base *)ptr)->foo = 1; } struct Derived s; foobar(&s); 例如,当其类型实际为Derived *时,将void指针强制转换为Base *来访问它的foo ?

在C1X中初始化匿名结构或联合

我有以下问题:根据当前的C1X草案,匿名结构(或联合)如何正确初始化? 这是合法的: struct foo { int a; struct { int i; int j; }; int b; }; struct foo f = { 1, 2, 3, 4 }; struct foo g = { 1, { 2 }, 3 }; 在GCC中, gj == 0和gb == 3 ,而在tcc gj == 3和gb == 0 。 目前的草案说: “[…]结构和联合类型的对象的未命名成员不参与初始化。结构对象的未命名成员即使在初始化之后也具有不确定的值。” 这真的可以吗? 是不是 […]

结构成员如何在内存中分配?

在尝试为未来的C程序创建内存管理器时,我遇到了这个问题: “当分配结构时,它们的成员字段是否按照指定的顺序存储?” 例如,请考虑以下结构。 typedef struct { int field1; int field2; char field3; } SomeType; 分配时,字段的内存地址是否在字段field1,field2,field3中? 或者这不保证?

是否可以在C中动态定义结构

我很确定这最终会成为一个非常明显的问题,这就是为什么我没有找到关于它的更多信息。 不过,我认为值得问:) 基本上,使用结构访问数据非常快。 如果数据以可以立即作为结构处理的forms从网络中传出,从性能的角度来看,这是非常好的。 但是,是否可以动态定义结构。 客户端和服务器应用程序是否可以协商数据流的格式,然后将该定义用作结构? 如果没有,有没有更好的方法呢? 谢谢大家!

返回结构指针

假设我有以下结构和函数返回一个指针: typedef struct { int num; void *nums; int size; } Mystruct; Mystruct *mystruct(int num, int size) { //Is the following correct? Is there a more efficient way? Mystruct mystruct; mystruct.num = num; mystruct.size = size; mystruct.nums = malloc(num*sizeof(size)); Mystruct *my; *my = mystruct; return my; } 我想使用上面的函数定义任何Mystruct指针。 我应该声明一个Mystruct变量,定义Mystruct的属性,指定它的指针,并返回指针或通过指针立即定义mystruct属性的属性?

在C中为结构分配内存

我的任务是创建一个为结构动态分配内存的程序。 通常我们会用 x=malloc(sizeof(int)*y); 但是,我对结构变量使用了什么? 我认为不可能这样做 struct st x = malloc(sizeof(struct)); 有人可以帮帮我吗? 谢谢!

箭头操作员与点操作员

在我看来,C的箭头操作符( – >)是不必要的。 点运算符(。)应该足够了。 请使用以下代码: typedef struct { int member; } my_type; my_type foo; my_type * bar; int val; val = foo.member; val = bar->member; 我们看到必须使用箭头运算符来取消引用条。 但是,我更愿意写 val = bar.member; 关于我是否试图从结构或指向结构的指针中拉出“成员”,没有任何歧义。 但是使用错误的运算符很容易,尤其是在重构代码时。 (例如,也许我在foo上做了一些复杂的操作,所以我将代码移动到一个新函数并将指针传递给foo)。 我认为我不需要关心foo是否是一个指针; 编译器可以担心细节。 所以问题是:从C语言中消除 – >不是更简单吗?