【发布时间】:2019-02-25 02:51:29
【问题描述】:
我正在用 C 语言编写程序。基本上我有一个包含一些字段和指针数组的结构。每个结构都有一个指针数组,指向另一个结构,在它们之间形成“连接”。我正在尝试获取存储在指向它的指针的内存地址中的字段的值。
假设这个。我在内存中有两个这样的节点。 A 和 B。A 在 A 的数组中有一个指针,它是对 B 的引用。要获得这个指针,我必须这样做:
*temp_ptr = (*ptr).pointer_array[0]
这将获取指针地址*ptr 并将其提供给*temp_ptr。
现在我想知道的是这个。我怎样才能做到这一点?当我尝试这个时,我得到“表达式必须具有结构或联合类型”
当我在 Java 中尝试这个时,我可以做到
int variable = field[0].fieldIWantToGet
我会得到想要的结果。
这是一张图片,用于阐明我想要获得的预期行为。 Link to behavior
其中结构 A 位于结构的“全局”集合中,并且具有指向其他结构的指针数组,例如 B
这是我项目中的一些代码。
#define GLOBAL_PTR_ARRAY_SIZE 10
Node* global_node_array[10];
typedef struct Node{
unsigned char node_id;
int *ptr_array[10];
int ptr_array_size;
}Node;
void append_connection(short position, short destination) {
Node* position_ptr = global_node_array[position];
Node* destination_ptr = global_node_array[destination];
if ((*position_ptr).ptr_array_size < GLOBAL_PTR_ARRAY_SIZE) {
int current_ptr_array_size = (*position_ptr).ptr_array_size;
(*position_ptr).ptr_array[current_ptr_array_size] = destination_ptr;
(*position_ptr).ptr_array_size++;
}
void print_id(Node* ptr) {
node* dptr = NULL;
dptr = ptr->ptr_array[0];
pptr = (int) (*ptr).ptr_array[0];
fprintf(stdout, "%d connection to %d exists", (*ptr).node_id, dptr-
>node_id);
}
int main(int argc, char const *argv[])
{
append_connection(0,1);
print_id(global_node_array[0]);
return 0;
}
【问题讨论】:
-
(*ptr).pointer_array[0]可以简化为ptr->pointer_array[0] -
"这会得到指针地址
*ptr并把它交给*temp_ptr。" 你为什么这么认为?右侧不仅仅是*ptr,而且您忽略了那些额外的位。请出示您的minimal reproducible example。