Tag: struct

迭代C中相同类型的struct成员

是否可以使用指针迭代C结构,其中所有成员都是相同类型。 这是一些不编译的示例代码: #include #include typedef struct { int mem1 ; int mem2 ; int mem3 ; int mem4 ; } foo ; void my_func( foo* data ) { int i ; int* tmp = data ; // This line is the problem for( i = 0; i < 4; ++i ) { ++tmp ; printf( […]

结构指针兼容性

假设我们有两个结构: typedef struct Struct1 { short a_short; int id; } Struct1; typedef struct Struct2 { short a_short; int id; short another_short; } Struct2; 从Struct2 *为Struct1 *是否安全? ANSI规范对此有何看法? 我知道有些编译器可以选择重新排序结构字段以优化内存使用,这可能会使两个结构不兼容。 有没有办法确定这段代码是否有效,无论编译器标志如何? 谢谢!

“名称”的存储大小未知

编译此.c源文件时出现此错误 /INIT_SOURCE_BUILD/src/names_list.c:7:错误:“名称”的存储大小未知 #include #include “list.h” int main(){ struct List names; names->size = 3; struct ListElmt michael; struct ListElmt john; struct ListElmt adams; names->head = michael; michael->data = 12; michael->next = john; john->data = 14; john->next = adams; adams->data = 16; struct ListElmt pointer = List->head; for(int x = 0; x data); pointer->next = pointer->next->next; } […]

为什么普通变量不允许使用位域?

我想知道为什么位域与联合/结构一起使用但不能使用像int或short这样的正常变量。 这有效: struct foo { int bar : 10; }; 但这失败了: int bar : 10; // “Expected ‘;’ at end of declaration” 为什么此function仅在联合/结构中可用而不在变量中? 技术不一样吗? 编辑: 如果允许,你可以创建一个3字节的变量,而不是每次都使用struct / union成员。 这就是我对结构的看法: struct int24_t { int x : 24 __attribute__((packed)); }; struct int24_t var; // sizeof(var) is now 3 // access the value would be easier: var.x = […]

如何使用灵活的数组成员初始化结构

我有以下结构 typedef struct _person { int age; char sex; char name[]; }person; 关于如何创建实例并使用灵活的数组成员初始化结构而不使用malloc()我已经完成了一些基本的互联网搜索(但不成功malloc() 。 例如:对于普通结构,如 struct a { int age; int sex; }; 我们可以创建一个struct a的实例并将其初始化为 struct a p1 = {10, ‘m’}; 但是对于具有灵活数组的结构(如_person提到的_person ),我们如何创建一个实例并初始化,就像我们如何为普通structures做的那样? 它甚至可能吗? 如果是这样,我们如何在初始化期间传递数组大小以及要初始化的实际值? (要么) 是否真的是使用灵活数组创建结构的唯一方法是使用C99规范中提到的malloc() – 6.7.2.1 Structure and union specifiers – point #17 ?

C结构大小不一致

可能重复: 如何找到结构的大小? 结构的内存大小不同? 我正在使用以下结构进行网络通信,它在两者之间创建了许多不必要的字节。 它给出了与预期的8字节不同的大小。 struct HttpPacket { unsigned char x1; union { struct { unsigned char len; unsigned short host; unsigned char content[4]; } packet; unsigned char bytes[7]; unsigned long num; } 并且以下给出了不同的大小,即使我从联合中删除了一个字段 struct HttpPacket { unsigned char x1; union { struct { unsigned char len; unsigned short host; unsigned char content[4]; } packet; […]

指针和数组在结构中使用零元素之间的区别

两种实现有何不同: struct queue { int a; int b; q_info *array; }; 和 struct queue { int a; int b; q_info array[0]; };

返回指向本地结构的指针

将指针返回到C中的本地结构是否安全? 我的意思是这样做 struct myStruct* GetStruct() { struct myStruct *str = (struct myStruct*)malloc(sizeof(struct myStruct)); //initialize struct members here return str; } 安全? 谢谢。

C与C ++中的struct和typedef

我目前正在使用C ++ IDE来处理需要在C上工作的东西,并希望确保稍后我不会遇到问题。 在制作下面的结构后: typedef struct test { int a; int b; }; 然后我使用test my_test;创建它的一个实例test my_test; 那么像my_test.a = 5类的东西……这在我的VStudio C ++中运行良好。 这会在以后的gcc上运行吗? 我读了相关的问题(我看到我不是第一个有这种问题的人),但似乎没有人像我这样做。 实际上, typedef struct {//stuff} test;之间有什么区别typedef struct {//stuff} test; 和我的版本?

Typedef,标记和未标记的结构以及不兼容的指针类型

请考虑以下C代码段: typedef struct node{ int val; struct node* left; struct node* right; }node; void inorderTraversal(node *p){ inorderTraversal(p->left); printf(“%d”,p->val); inorderTraversal(p->right); } 如果我只编写typedef struct而不是typedef struct node ,当我在main()调用inorderTraversal(root)时,我会收到一条警告,说“传递不兼容指针类型的参数”。 为什么即使程序没有显示任何错误,我也会收到此警告?