Tag: struct

挑选一个Python扩展类型,定义为具有PyObject *成员的C结构

我正在通过Python运行C ++代码,并希望挑选一个扩展类型。 所以我有一个C ++结构(py_db_manager),它包含指向数据库对象的指针和一个用python类型对象(t_db_manager)包装的对象管理器对象(都是用C ++编写的)。 我的问题是这个python类型需要知道如何pickle两个指针,以便将它发送到一些子多核进程。 所以我用copy_reg模块注册了这个类型(这相当于在类型上编写了一个reduce ()方法。但是,我不太清楚要放入什么内容。我应该用PyObject *构建一个元组,还是仅仅是整数指针?有人可以帮忙吗? typedef struct { PyObject_HEAD PyObject* man_inst_ ; PyObject* db_inst_ ; }py_db_manager;` 这是Py_TypeObject PyTypeObject t_db_manager = { PyObject_HEAD_INIT(0) /* tp_head */ 0, /* tp_internal */ “.py_db_manager”, /* tp_name */ sizeof(py_db_manager)}; 这里是reduce方法中的代码: PyObject *pickle_manager(PyObject *module, PyObject *args) { py_db_manager *cpp_manager =0; PyObject *values = NULL, *tuple = NULL; […]

使用fwrite()将结构写入文件

我有以下程序: #include #include #include #define MAXLEN 100 typedef struct {int key; char data[MAXLEN];} record; main(int argc, char *argv[]) { int n, i; record x; FILE *fp; fp = fopen(argv[1], “w+”); printf(“How many records will be entered? \n”); scanf(“%d”, &n); for (i=0; i<n; i++) { printf("Enter record: \n"); scanf("%d", &x.key); scanf("%s", &x.data); fwrite(&x, sizeof(record), 1, fp); […]

在定义结构时避免“重新定义typedef”警告

我正在定义一些引用彼此的结构,并在使用它们之前键入结构,因此每个结构都“了解”其他结构(没有这个就得到了编译错误)。 不确定这是否必要或正确。 现在用gcc编译时,我正在“重新定义typedef”警告。 这是怎样的正确方法? typedef struct a A; typedef struct b B; typedef struct c C; struct a { B* list; A* parent; }; struct b { A* current; B* next; }; struct c { A* current; A* root; }; 更新:愚蠢,错误的复制粘贴导致此标头被包含在另一个文件中两次。 我是C的新手,并认为它必须与文件中的结构两次有关。 谢谢@Kevin Ballard的提醒。

C或C ++中位域的最大大小?

可能重复: struct bitfield max size(C99,C ++) 我可以在C或C ++的位字段中指定的位数是否有限制? 例如,我可以这样做: struct HugeInt { int myInt: 1000; }; 我问的是C和C ++,因为我知道语言规范有时会有所不同,并希望看看上面的例子是否可以保证在C或C ++中工作/不工作。

在Struct中存储和访问2D数组

我正在尝试在C中编写一个程序,根据用户输入生成螺旋并将其打印到控制台。 我无法弄清楚如何访问我在结构“螺旋”中定义的2D数组“数据”。 如何修复“警告:从不兼容的指针类型分配”错误? #include typedef struct Spiral { int size; int **data; } Spiral; Spiral generateSpiral(int size); void printSpiral(Spiral spiral); static int rotate(); int main() { int size; scanf(“%d”, &size); Spiral spiral = generateSpiral(size); printSpiral(spiral); return 0; } Spiral generateSpiral(int size) { int data[size][size]; int i; for (i = 0; i < size; i++) { […]

如何fread()结构?

struct book { unsigned short size_of_content; unsigned short price; unsigned char *content; }; 假设我有包含多book的文件,每个book都有不同的size_of_content , price和content 。 我如何一次阅读一book并确定它是哪本书(例如检查价格)? size_t nread2; struct book *buff = malloc(sizeof(struct book)); while( (nread2 = fread(buff, sizeof(struct book), 1, infp)) > 0 ) { printf(“read a struct once \n”); } 这就是我到目前为止所拥有的。 每当我读取结构时,我都会尝试打印。 但是,当我尝试使用5个结构的输入文件时,它将打印15次… 谢谢。

在没有赋值的情况下初始化struct?

我无法在互联网上找到答案,所以这是我的问题:我可以定义一个结构实例而不将其分配给C中的本地或全局变量吗? 例如: struct A { int b; } struct A foo() { return struct A { .b = 42 }; } 如果这不可能:为什么?

为什么为结构使用不同的标记和typedef?

在C代码中,我看到了以下内容: typedef struct SomeStructTag { // struct members } SomeStruct; 我不清楚为什么这有什么不同: typedef struct SomeStruct { // struct members } SomeStruct; 使用特定名称的类型和类型将其定义为不同的类型名称有什么意义?

用struct 理解typedef

我很难理解这段代码: typedef struct node { int data; struct node * next; } node; typedef node * nodepointer; 所以,我们正在使用typedef构建struct节点…我假设我们这样做是为了初始化struct而不需要“struct”关键字。 我想问一下为什么在struct定义中我们使用名称“node” 两次 (在开始和结束时)。 其次是typedef node * nodepointer; 指着。 在这种情况下是否有必要使用typedef? 这个表达式是node * nodepointer; 不平等?

全局变量和返回C函数中的多个可变长度数组(指针)

我有一些编程经验,但对C没什么用。 我有一个相当大的C文件。 在其中有多个函数按顺序执行 – 因此在这种特殊情况下,实际上没有函数被调用两次,它们被分解以便于阅读,因为每个函数仍然有一个单独的目的。 这个程序对几个长度可变的double数组进行了大量的计算,因此它们都是指针。 两个问题: 1)从开头计算一次然后作为许多后续函数的输入的变量 – 我应该在这个文件中使它们成为全局变量吗? 根据我在高级语言编程的经验,全局变量并不好。 这不是C的情况,为什么? 2)当我的函数中的一个想要返回多个指针(例如,每个指向一个长度为n的双数组)时,请说double * p1,double * p2,double * p3是相关的,我可以将它们组合成一个结构: struct pointers { double *p1, *p2, *p3; } ptr; foo1将输入double *作为输入,并计算ptr-> p1,ptr-> p2,ptr-> p3,然后ptr将作为foo2的输入。 我应该写吗? struct pointers *foo(double *input) 要么 void foo1(double *input, struct pointers ptr) 要么 void foo1(double *input, struct pointers *ptr) 为什么C函数通常是’void’函数,除非它只返回一个int或double变量? 输入和输出都作为参数 – […]