【发布时间】:2017-12-11 18:21:10
【问题描述】:
我需要指针语法方面的帮助。我有一个结构数组,我正在尝试从另一个结构内部创建一个指向它的指针,该结构包含在一个数组中。
struct foo array* = malloc(sizeof(foo)*10);
bar_arr[i]->foo_ptr = &array;
我已经阅读了这个问题:c pointer to array of structs。虽然它确实消除了一些混乱,但我仍然有一些错误需要解决。
我已经这样定义了我的结构:
struct bar{
...
struct foo (*foo_ptr)[];
...
}
似乎我可以向数组中添加新结构,因为以下没有返回错误:
(*bar_arr[i]->foo_ptr)[j] = new_struct;
但是,如果我尝试在结构数组中创建一个指向结构的新指针,如下所示:
struct foo* one_ptr = (*bar_arr[i]->foo_ptr)[j];
或者这个:
struct foo* one_ptr = bar_arr[i]->foo_ptr[j];
编译器会给我错误。一种是无效使用具有未指定边界的数组,或者 one_ptr 和 foo_ptr[j] 具有不兼容的类型(在这种情况下:一种是 foo 类型,另一种是 struct foo *)。
是否根本不可能创建指向结构数组元素之一的指针?任何帮助将不胜感激。
编辑:更好的代码示例
我目前正在使用线性链表作为共享内存堆栈,与 pthread 一起使用。结构数组是节点的共享池。每当从堆栈中删除一个节点时,它就会被放入共享池中。如果线程尝试向堆栈添加新元素,它会检查要添加的元素是否存在于池中,以避免每次需要向堆栈添加另一个元素时都必须分配新内存。
每个线程都需要一个指向共享节点池的指针作为参数。这就是为什么我试图从参数结构中创建一个指向它的指针。我希望这个问题会有一个简单的答案。
typedef struct node{...} node_t;
struct thread_args
{
...
node_t (*pool)[];
...
}
node_t shared_pool = malloc(sizeof(node_t)*10);
arg[index]->pool = &shared_pool;
我正在尝试访问线程正在执行的函数之一中的池。
node_t *item;
item = stack->root;
//remove item from stack
(*args->pool)[index] = item;
//...later
node_t *item2;
item2 = (*args->pool)[index];
希望这能提供更多信息。
另外,我尝试使用时得到的确切错误:
node_t *pool;
args[index]->pool = shared_pool;
如下:error: incompatible types when assignmenting to type ‘struct node_t *’ from type ‘node_t’。
【问题讨论】:
-
这里的名字实在是太笼统了,没有足够的上下文来理解你在这里的意图。您能否就您的结构和目标给出一个更完整但最小的示例?
-
如果不查看您尝试创建的引用的布局,很难判断您正在尝试做什么。特别是,我不确定为什么需要指向数组的指针,而不是常规指针,后者是表示数组的常用方式。