Tag: 结构

如何正确访问此结构中的指针?

下面是2个结构的定义,然后是使用它们的简短方法体。 我不明白为什么编译器会抛出错误: physics.c:95:错误:赋值中不兼容的类型 cpBody和cpSpace是来自外部库的类型,这不是问题的一部分。 typedef struct gameBody gameBody; struct gameBody { cpBody *body; int numberOfShapes; cpShape *arrayOfShapes; //This stores an array of pointers to Shapes }; //Struct that stores the cpSpace object and the array of pointers to the body objects typedef struct gameSpace gameSpace; struct gameSpace { cpSpace *space; int numberOfObjects; gameBody *arrayOfObjects; //This […]

在结构中安排字段的方式更好?

我有两种方法来安排结构中的字段 struct foo { float a; double b; float c; double d; short e; long f; short g; long h; char i; int j; char k; int l; }; struct foo { double b; double d; long f; long h; float a; float c; int j; int l; short e; short g; char i; char […]

修改作为指针传递的结构 – C

我试图通过使用指针来修改作为参数传递的结构,但是我无法使其工作。 我不能只返回结构,因为该函数必须返回一个整数。 如何修改函数中的结构? 这是我到目前为止所做的: typedef enum {TYPE1, TYPE2, TYPE3} types; typedef struct { types type; int act_quantity; int reorder_threshold; char note[100]; }elem; int update_article(elem *article, int sold) { if(*article.act_quantity >= sold) { article.act_quantity = article.act_quantity – sold; if(article.act_quantity < article.act_quantity) { strcpy(article.note, "to reorder"); return -1; } else return 0; } else if(article.act_quantity < venduto) […]

如何在C中创建具有两个可变大小数组的结构

我正在编写一个轻量级序列化函数,需要在其中包含两个可变大小的数组。 我该如何追踪每个的大小? 我该如何定义结构? 我错了吗? 编辑:结果必须是连续的内存块

使用Glib向GSList添加自定义结构

我正在尝试使用函数g_slist_append(list,&structure)将结构添加到单链表中。 这似乎工作(它添加指针),但我似乎无法找到一种方法来查看链接列表时结构中的元素。 我的结构看起来像这样: struct customstruct { int var1; int var2; char *string_1; } 然后,我列出一个列表: GSList *list = NULL; 然后,我附加一个结构的实例,如下所示: struct customstruct list_entry; list_entry.var1 = 1; list_entry.var2 = 2; list_entry.string_1 = “String”; list = g_slist_append(list, &entry); printf(“Entry var1 = %d\n”, list->data->var1); 最后一行失败,因为无法找到var1 (请求成员不是结构或联合)。 我想我需要把它投到正确的类型,但我不知道如何。 任何人?

函数指针C中的结构

typedef struct Item{ int i; int j; void (*fooprint)(item*); }item; void fooprint(item *it){ printf(“%d\n”,it.i); } int main(){ item myitem; myitem.i=10; myitem.j=20; myitem.fooprint = fooprint; myitem.fooprint(&myitem); return 0; } 此代码在void( footprint)(item )中给出错误。 “错误是预期’)””’令牌”之前。 我错过了什么吗? 当我这样做而不使用指针结构是有效的。 示例:void(* footprint)(item)

如何初始化包含多个元素中的唯一项的结构

我有4个数组代表: 颜色(r,g,b,y) 形状(A,B,C,D) 数字(1,2,3,4) 纹理(a,b,c,d) 并且每个数组也可以有4个值。 我希望在数组中包含所有这些元素的所有可能组合。 例如rA1a,rB1a,rC1a等。 我正在考虑创建一个结构,然后以某种方式创建这256个结构元素。 但是我完全不知道如何做到这一点 – 我的意思是创建256个元素 ! 有人可以指出我正确的方向吗? 我想的结构是这样的,但结构可能不是我需要的结构? 接下来我打算做的是随机选择这些256个元素中的一些,并将选中的元素放入2d数组中以进一步操作它们。 但首先要做的事情! typedef struct { char colour; char shape; char nr; char texture; }ST1;

将文本文件读入结构

我的文本文件是这样的(文件中的数据也可以增加) 822 172.28.6.56 172.34.34.53 3244 5434 844 192.150.160.145 192.67.45.123 2344 234 700 192.13.56.6 192.89.95.3 4356 3566 522 172.28.6.137 172.28.6.110 2543 5245 900 255.255.255.255 244.244.244.244 2435 3245 我的结构是这样的 struct input_par { int key_node; char src_ip[15]; char dst_ip[15]; int src_port; int dst_port; }; 我必须从存储在文件中的数据中填充这个结构,一旦完成输入结构的5个成员我必须将此结构发送到函数,即,我填充结构 822 172.28.6.56 172.34.34.53 3244 5434 然后我将这个结构发送到一个函数,在将它发送到函数后,我应该再次输入带有文件中下一个数据的结构,即 844 192.150.160.145 192.67.45.123 2344 234 我必须继续这样做直到我到达EOF。 我使用fscanf它不能正常工作怎么做? […]

结构中的数组

我是C的新手,在嵌入结构时遇到arrays类型问题。 以下是我的问题的一个例子: typedef struct { double J[151][151]; } *UserData; static int PSolve(void *user_data, N_Vector solution) { UserData data; data = (UserData) user_data; double J[151][151]; J = data->J; /* Solve a matrix equation that uses J, stored in ‘solution’ */ return(0); } 当我尝试编译这个时,我得到错误:从类型’double(*)[151]’分配类型’double [151] [151]’时出现不兼容的类型 我目前的解决方法是用代码中的’data-> J [x] [y]’替换’J [x] [y]’来求解矩阵方程,但是分析表明这样做效率较低。 将参数更改为PSolve不是一个选项,因为我正在使用sundials-cvode解算器来规定参数的类型和顺序。 谢谢你的帮助,安德鲁

为什么结构定义有内部联系?

(我在谈论C,但它也适用于C ++中的类模板) 在头文件中,放置所有DECLARATIONS而不是定义是自定义的。 但是,我们通常将结构定义或类模板放在头文件中,而实际上并不知道为什么我们可以。 这并没有多大意义,因为它们也是定义 – 一个定义规则。 (是的,结构定义和类模板不会导致设置任何存储,但是仍然会出现“重新定义”错误,这意味着它们是定义)。 EX)在同一文件中定义具有相同标记的多个结构会给出重新定义错误,但在多个源文件中定义具有相同标记的多个结构不会导致任何错误(类同样发生)。 唯一有意义的是结构定义和类模板具有内部链接(与默认外部链接相对),但我在K&R或参考手册中找不到任何关于它的引用。 实际上,连接中甚至没有提到结构。 我想知道ANSI标准指出这种现象的确切参考。 (国际海事组织,这是一个非常模棱两可的问题,在ANSI标准的某处提到)。 编辑我不是问为什么结构定义可以放入头文件。 我问为什么在头文件中放置结构定义不会像我们在头文件中放入变量定义时那样导致重定义错误(并将其包含在多个源文件中) EX)test1.c:int a = 3; test2.c:int a = 4; 由于重新定义导致编译错误。 然而, test1.c:struct test {int a}; test2.c:struct test {int b}; 不会导致编译错误,我能想出的唯一原因是结构定义要么具有内部链接,要么根本没有链接。