如何在c中检查指针指向结构数组是否为空?

时间:2015-04-22 09:36:14

标签: c arrays pointers

希望我的问题是可读的..

所以我正在做的是将具有唯一dataIndex的项插入到数组中,但在插入之前,我需要检查dataIndex是否已被使用。

这是我使用的两种结构:

typedef struct item {
    float key; // the key for deciding position in heap
    unsigned int dataIndex; // a unique id for each item
} HeapItem;

typedef struct heap {
    HeapItem *H; // the underlying array
    unsigned int *map; //map[i] is the location of item with dataIndex==i
    unsigned int n; // the number of items currently in the heap
    unsigned int size; // the maximum number of items allowed in the heap
} Heap;

我检查dataIndex所做的是:

for (unsigned int i = 0;  i < h->n; i++) {
        if (h->H[i].dataIndex == dataIndex) {
            return HEAP_FAIL;
        }
}

但每次插入内容时,这个for循环将花费O(n)次,所以我想做的是:

if (h->map[dataIndex] != NULL ) {
    return HEAP_FAIL;
}

但这段代码不起作用。

所以我的问题是如何检查h->H[h->map[dataIndex]]是否为空?

以下是我分配H和map的方式:

h->H = (HeapItem *)malloc(sizeof(HeapItem));
h->map = (unsigned int *)malloc(sizeof(unsigned int));

1 个答案:

答案 0 :(得分:0)

new QTTestClass()

它不起作用,因为if (h->map[dataIndex] != NULL ) { return HEAP_FAIL; } 包含值而非地址,h->map[dataIndex]以上将检查值if。即使您没有初始化,任何位置都会有一些垃圾值。

所以,最好的方法是初始化一些值,比如-1,无穷大,或者你认为不会出现在实际值范围内的任何值。