我有两个数组,每个数组初始化如下:
struct file_descriptor *list1 = (struct file_descriptor *)malloc(4096 * sizeof(struct file_descriptor));
struct file_descriptor *list2 = (struct file_descriptor *)malloc(4096 * sizeof(struct file_descriptor));
每个数组本质上是一个struct file_descriptor
指针的列表。
现在list1
已经在数组中有一个指针(指向struct file_descriptor
的指针),我需要在list2
中有相同的索引指向list1
指针指向的相同对象。因此,如果list1[2] = some_object
,我也试图指向list2[2] = some_object
。
:
int i;
for(i = 3; i < 4096; i++) {
struct file_descriptor *parent_fd = &list1[i]; // points to the struct that element at i points to in list1
list2[i] = parent_fd;
}
在循环的第2行,抛出:incompatible types when assigning to type ‘struct file_descriptor’ from type ‘struct file_descriptor *’
错误。
显然,这是因为list2[i]
是实际的struct file_descriptor
,而不是list2
中指向该结构体的指针。将其更改为&list2[i] = parent_fd;
也会抛出错误,因为&list2[i]
不是左值。
如何解引用数组中索引i
的指针,使list2[i]
指向*list1[i]
list1
和list2
的类型为struct file_descriptor **
,而不是struct file_descriptor *
。
struct file_descriptor
指针或变量。
无论如何,如果您希望list2
中的指针指向与list1
中的指针相同的结构变量,那么它相当简单。你可以这样做:
for(i=0;i<=4096;i++)
list2[i]=list1[i];
此外,如果您希望您的数组是pointers
到结构变量的数组,而不是结构变量的数组,那么您应该使用以下命令:
malloc(4096 * sizeof(struct file_descriptor*)); //note the second *
Edit您的行list2[i] = parent_fd;
显示类型不匹配,因为您已将list2
声明为类型struct file_descriptor*
,因此list2[i]
为类型struct file_descriptor
,而parent_fd
为类型struct file_descriptor*
。简单地说,=
的左侧是结构变量,而右侧是指向结构变量的指针。就像我说的,您应该将list1
和list2
声明为struct file_descriptor**
类型,而不是struct file_descriptor*
,这应该可以处理您遇到的警告