Tag: struct

结构 – 解释输出:

我有以下C代码。 struct values{ int a:3; int b:3; int c:2; }; void main(){ struct values v={2,-6,5}; printf(“%d %d %d”,va,vb,vc); } 当我执行代码时,我得到以下输出: 2 2 1. 但输出应该是2 -6 5 ,对吗? 如果我错了请解释。

使用typedef结构时,错误’类型为“X *”的值无法分配给“X *”类型的实体

这是我用于节点的结构… typedef struct { struct Node* next; struct Node* previous; void* data; } Node; 这是我用来链接它们的function void linkNodes(Node* first, Node* second) { if (first != NULL) first->next = second; if (second != NULL) second->previous = first; } 现在,visual studio正在给我这些行上的intellisense(less)错误 IntelliSense: a value of type “Node *” cannot be assigned to an entity of type “Node *” […]

C中的结构混淆

所以我正在浏览这个C教程 ,我找到了这些代码行: struct Monster { Object proto; int hit_points; }; typedef struct Monster Monster; 而且我认为如果是这样的话会更有意义: typedef struct { Object proto; int hit_points; } Monster; 我可能完全错了,因为我对C很新,但我会假设这两段代码都会做同样的事情。 他们这样做了,那么有什么理由更喜欢一个而不是另一个? 或者如果它们不同,是什么让它们与众不同? 谢谢!

通过传递引用或返回它来初始化结构是否更好?

说我有以下内容: typedef struct { int x; int y; char a; char b; } myStruct; 通过将引用传递给空函数,或者通过从函数返回myStruct ,创建具有函数的新myStruct是更好的做法吗? void init(myStruct* s){ //some code } int main(){ myStruct s; init(&s); return 0; } VS myStruct init(){ myStruct r; //some code return r; } int main(){ myStruct s = init(); return 0; }

返回函数c中的结构

我正在尝试从函数返回一个struct 。 看起来像这样.. struct read(struct returnera returnDuo, struct vara varuArray[]) { char varunr[LISTNUMBER], varunamn[LISTNUMBER]; FILE *varuLista; varuLista = fopen(returnDuo.filnamn, “r”); if(varuLista!=NULL) { while(fscanf(varuLista,”%s\t%s\t%d\n”,varunr, varunamn, &varuArray[returnDuo.antalVaror].lagerSaldo) == 3){ strncpy(varuArray[returnDuo.antalVaror].varuNr,varunr,5); strncpy(varuArray[returnDuo.antalVaror].varuNamn,varunamn,30); returnDuo.antalVaror++; } printf(“Filen är laddad..\n”); kommaVidare(); } else { printf(“Filen hittades inte, skapar en tom fil”); kommaVidare(); } fclose(varuLista); return returnDuo; } 我正在尝试返回returnDuo结构中的内容,但是我收到错误消息:“预期标识符或’(’”。如果我使用void函数,它按预期工作而不返回任何内容,但我无法弄清楚如何返回此struct 。 这就是我设置结构的方法。 struct […]

为什么我在初始化结构时会遇到段错误?

搜索了一个小时左右。 我想我最好在这里发布这个问题。 我简化了代码。 segfault位于函数initMyStruct 。 #include “stdlib.h” typedef struct { int * arr1; int * arr2; } myStruct; void allocMyStruct (myStruct * a, int num) { a = malloc(sizeof(myStruct)); a->arr1 = malloc(10*sizeof(int)); a->arr2 = malloc(10*num*sizeof(int)); } void initMyStruct (myStruct * a, int num) { int i; for (i = 0; i arr1[i] = 0; for […]

未提及的struct fields *总是*初始化为零(即结构在堆栈中时)?

来自实验(在Clang和GCC中,使用-O2和-O0) 似乎在以下代码中 typedef struct foo_s { int i; int j; } foo_t; int main(void) { foo_t foo = {.i = 42}; … foo.j自动为零。 是否由C99开始保证,还是编译器特定的实现细节? 注意:我甚至尝试将0xFF写入堆栈下方的无效内存,稍后给出了foo的地址。 更新:有几条评论声明这只是因为堆栈下方的内存恰好包含零。 以下代码确保不是这种情况,并且可能certificateGCC -O0正在归零内存。 -7和-6的偏移量取决于编译器。 他们需要在Clang中有所不同。 typedef struct foo_s { int i; int j; } foo_t; int main(void) { int r; int *badstack0 = &r – 7; int *badstack1 = &r […]

预期’struct matrix_t *’但参数的类型为’struct matrix_t *’?_? 没有不同

main.c:78:25: erreur: assignment from incompatible pointer type [-Werror] main.c:81:9: erreur: passing argument 2 of ‘matrix_multiply’ from incompatible pointer type [-Werror] main.c:6:11: note: expected ‘struct matrix_t *’ but argument is of type ‘struct matrix_t *’ 第6行是matrix_multiply函数 这是我的代码,从第74行开始 matrix_t *m; matrix_t *first = matrix_reader_next(reader); matrix_t *previous = first; while ( (m = matrix_reader_next(reader))) { previous->next = m; […]

这是一个C11匿名结构吗?

我正在调查C11草案,它说 没有标记的结构类型的未命名成员称为匿名结构; 没有标记的联合类型的未命名成员称为匿名联合。 匿名结构或联合的成员被视为包含结构或联合的成员。 所以我构建了以下测试用例 // struct type with no tag typedef struct { unsigned char a; unsigned char b; // … Some other members … unsigned char w; } AToW; union { AToW; // <- unnamed member unsigned char bytes[sizeof(AToW)]; } myUnion; Clang和GCC都抱怨这名未透露姓名的成员,并表示该声明无效。 我做错了什么,或者他们根本不支持这个function?

初始化结构的指定初始化

我知道我可以使用指定的初始化程序初始化C99中的结构,如下所示: typedef struct { char a; char b; int c; } MyStruct; MyStruct s = {.a = 1, .b = 2, .c = 3}; (该代码在我的c ++编译器中不起作用,但(俄语)维基百科说它应该) 但是对于一些奇怪的原因,这样的代码也会编译(并按预期工作): typedef struct { char a; char b; int c; } MyStruct; MyStruct arr[5]; int main(void) { arr[0] = (MyStruct){.a = 1, .b = 2, .c = 0x332211}; } […]