试图将对象传递给函数?

时间:2014-02-09 13:28:53

标签: c arrays

我正在尝试发送包含随机整数的数组(这是一个对象?)。我想将数组发送到 sort()以便对数组进行排序,但是当我将数组解析为 sort()时,我得到了以下错误:error: dereferencing pointer to incomplete type。如果您要更改代码中的任何内容,请解释您正在做什么以及为什么要这样做,因为我已经对代码感到困惑,因为它现在是

我不允许更改array.c或array.h中的代码,并且无法更改void_sort()的参数

array.c

struct array {
    int* data;
    int size;
};

struct array* array_create()
{
    struct array* array = (struct array*) malloc(sizeof(struct array));
    array->data = (int*) malloc(sizeof(int) * 10000);
    array->size = 10000;
    return array;
}

array.h

typedef struct array* ARRAY;

ARRAY array_create();

的main.c

void sort (int A[], int N) 
{
    // Sort the array
}

ARRAY array;
array = array_create();
sort(array->data, 100);  // This gives me error: dereferencing pointer to incomplete type

2 个答案:

答案 0 :(得分:1)

您需要将数组struct的声明移至array.h。您得到的错误是因为main.c中未知该类型。您可以使用指向未定义类型的指针,但无法访问其成员。

如果要隐藏实现,可以创建访问功能。添加到array.h:

int *array_data(ARRAY array);
int array_size(ARRAY array);

和array.c:

int *array_data(ARRAY array) { return array->data; }
int array_size(ARRAY array) { return array->size; }

并在main.c中:

sort(array_data(array), array_size(array));

答案 1 :(得分:1)

您需要将其从array.c移动到array.h:

struct array {
    int* data;
    int size;
};

那是因为这声明了数组类型。如果您不想这样做,可以将其复制粘贴到main.c中,每个人都会讨厌您,但您将完成不修改array.h或array.c的目标。