Tag: 结构

C中的结构数组

我正在尝试创建一个结构数组,也是一个指向该数组的指针。 我不知道数组有多大,所以它应该是动态的。 我的结构看起来像这样: typedef struct _stats_t { int hours[24]; int numPostsInHour; int days[7]; int numPostsInDay; int weeks[20]; int numPostsInWeek; int totNumLinesInPosts; int numPostsAnalyzed; } stats_t; …我需要为每个文件(未知数量)提供多个这些结构,我将分析。 我不知道该怎么做。 由于数组大小的限制,我不喜欢以下方法: # define MAX 10 typedef struct _stats_t { int hours[24]; int numPostsInHour; int days[7]; int numPostsInDay; int weeks[20]; int numPostsInWeek; int totNumLinesInPosts; int numPostsAnalyzed; } stats_t[MAX]; 那我该怎么创建这个数组呢? […]

如何在C中创建结构的新实例

在C中,定义结构时。 创建新实例的正确方法是什么? 我见过两种方式: struct listitem { int val; char * def; struct listitem * next; }; 第一种方式(xCode说这是重新定义结构和错误): struct listitem* newItem = malloc(sizeof(struct listitem)); 第二种方式: listitem* newItem = malloc(sizeof(listitem)); 或者,有另一种方式吗?

共同第一成员的结构联盟

我不确定代码是否在断言转换中具有指针别名(或其他标准一致性问题)。 似乎指向联合类型的指针应该能够转换为第一个成员的指针,因为联合只由这两个结构组成,我认为对第一个成员的强制转换应该有效,但我不是确定这是否正确,或者我是否在过程中掩盖了填充细节。 工会是否需要填补高位? 这似乎是未指明的行为? 有没有人知道这是否被支持。 我知道有一种替代的标准方法可以通过使用带有enum type字段和struct container_storage成员的struct container_storage这一点,但考虑到此信息已经struct contained在struct contained ,这似乎是浪费空间 linux中的编译命令: gcc -std=c99 -Wextra -pedantic -fstrict-aliasing test.c && ./a.out && echo $? 返回0 #include #include enum type {type_a = 1, type_b = 2}; struct contained { int some_other_field; enum type type; }; struct container_a { struct contained contained; int test; }; struct container_b […]

C:动态大小的结构的推荐样式

我需要通过互联网传输数据包,其长度应该是动态的。 struct packet { int id; int filename_len; char filename[]; }; 问题是零长度数组不符合ISO标准。 我应该使用char filename[1]; 代替? 但是sizeof(struct packet)将不再返回正确的值。

C结构中的数组

我想在一个struct中有两个数组,这些数组在start时初始化但需要进一步编辑。 我需要三个结构实例,这样我就可以索引到一个特定的结构并按我的意愿修改。 可能吗? 这是我认为我可以做但我得到错误: struct potNumber{ int array[20] = {[0 … 19] = 10}; char *theName[] = {“Half-and-Half”, “Almond”, “Rasberry”, “Vanilla”, …}; } aPot[3]; 然后我按如下方式访问结构: printf(“some statement %s”, aPot[0].array[0]); aPot[0].theName[3]; …

为什么结构不能直接分配?

假设我有一个带有标记MyStruct的完全定义的结构,并假设x, y, …, z是其字段的允许值。 为什么是 struct MyStruct q = {x,y,..,z}; 允许,但是 struct MyStruct q; q = {x,y,…,z}; 不被允许? 我觉得这很烦人。 在第二种情况下,我之前已经声明了q ,我需要逐个为每个字段分配一个值: qX = x; qY = y; … qZ = z; 其中X, Y, …, Z是MyStruct的字段。 这背后有原因吗?

联合和结构包装问题

我正在编写一些软件,其中每个位必须精确(它是CPU的),所以__packed非常重要。 typedef union{ uint32_t raw; struct{ unsigned int present:1; unsigned int rw:1; unsigned int user:1; unsigned int dirty:1; unsigned int free:7; unsigned int frame:20; } __packed; }__packed page_union_t; 那是我的结构和结合。 但它不起作用: page_union_t p; //….. //This: p.frame=trg_page; p.user=user; p.rw=rw; p.present=present; //and this: p.raw=trg_page<<12 | user<<2 | rw<<1 | present; 应该创建相同的uint32。 但他们并没有创造同样的东西。 有什么我看不出我的工会有问题吗?

C-使用位域时的结构大小以及如何将其存储在存储器中

void main() { struct bitfield { signed int a :3; unsigned int b :13; unsigned int c :1; }; struct bitfield bit1 = { 2, 14, 1 }; clrscr(); printf(“%d”, sizeof(bit1)); getch(); } 为什么大小为4字节? 这些元素究竟是如何存储在内存中的?

在C中打印结构

我正在尝试打印一个在函数中作为参数出现的struct ,以便进行一些调试。 无论如何我可以在不知道它看起来的情况下打印结构的内容,即不显式打印每个字段? 你看,根据不同#define的负载,结构可能看起来非常不同,即可能有或没有不同的字段,所以我想找一个简单的方法来做一些像print_structure(my_structure) 。 NetBeans的调试器可以为我做到这一点,但不幸的是代码在我无法运行调试器的设备上运行。 有任何想法吗? 我想这是不可能的,但至少在编译时可能会有一些宏来做这件事吗? 谢谢!

如何为LLVM声明压缩结构(不填充)?

可以告诉GCC它不应该为结构使用填充。 这是使用__attribute__((packed)) 。 typedef struct { uint8_t startSymbol; uint8_t packetType; uint32_t deviceId; uint16_t packetCRC; } PacketData __attribute__((packed)); 但是,最新的Xcode使用LLVM并且无法识别该属性。 如何为LLVM定义压缩结构? 可以在此处找到问题的完整描述 更新我正在使用Xcode 4.5.1 for iOS,它使用Apple LLVM 4.1编译器。 我在上面的代码示例中的Xcode中收到“’packed’属性被忽略”警告。