C语言动态数组中的指针解引用



我有两个数组,每个数组初始化如下:

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]

list1list2的类型为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*。简单地说,=的左侧是结构变量,而右侧是指向结构变量的指针。就像我说的,您应该将list1list2声明为struct file_descriptor**类型,而不是struct file_descriptor*,这应该可以处理您遇到的警告

相关内容

  • 没有找到相关文章

最新更新