我对C比较陌生。我写了以下代码:
#include "HashTable.h"
hashTable* newHashTable()
{
hashTable* h = malloc(sizeof(hashTable));
h -> size = TABLE_SIZE;
h -> table = createTable(TABLE_SIZE);
return h;
}
entry* createTable(int size)
{
entry* table = malloc(sizeof(entry) * size);
int i;
for(i=0; i<size; i++)
(table + i) -> word = NULL;
return table;
}
,HashTable.h的内容是:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define TABLE_SIZE 7
#define HASH_INCREMENT 3 // for efficient utilization of the hash table keep TABLE_SIZE * 2^n relative prime to HASH_INCREMENT
typedef struct entry_t
{
char* word;
int frequency;
}entry;
typedef struct hashTable_t
{
int size;
entry* table;
}hashTable;
当我尝试编译此代码时(还有一些其他代码)我收到以下警告:
HashTable.c: In function ‘newHashTable’:
HashTable.c:7:13: warning: assignment makes pointer from integer without a cast [enabled by default]
第7行实际上是newHashTable()函数中的第三行。我现在正在看这几个小时。请帮我解决这个警告。
答案 0 :(得分:4)
Ansii C假设未声明的任何函数返回int
。
您应该在createTable
newHashTable
entry* createTable(int size);
hashTable* newHashTable()
{
/* implementation */
}
entry* createTable(int size)
{
/* implementation */
}
或在任何通话之前移动其实施
entry* createTable(int size)
{
/* implementation */
}
hashTable* newHashTable()
{
/* implementation */
}
或声明标题中也定义结构
的函数typedef struct entry_t
{
char* word;
int frequency;
}entry;
typedef struct hashTable_t
{
int size;
entry* table;
}hashTable;
entry* createTable(int size);
hashTable* newHashTable();