关于代码:
tp是指向包含表的某个结构的指针。
该表是指向不同结构的指针的指针,用作数组。
大小就是表格的大小。
我将这些序列发送到一个函数,以初始化
中的所有单元格数组为NULL。
这一行:
initArr(tp->table,tp->size);
将它们发送到此功能:
void initArr(ObjectP* array,int size)
{
int i;
for (i = 0; i < size; ++i)
{
array[i]=NULL;
}
}
使用eclipse调试器我可以看到数组中的对象是实际的
被初始化为NULL,但是当方法结束时,
tp-&gt;表为NULL。
指针疯了吗? 请帮忙。结构:
表:
typedef struct Table
{
size_t size;
hashFcn hash;
printFcn print;
comparisonFcn comp;
ObjectP* table;
int duplicated;
}Table;
对象:
typedef struct Object
{
void *key;
ObjectP pointsTo;
}Object;
答案 0 :(得分:0)
显示的代码似乎错了(你从void函数返回一些东西!),但我会猜测并假设在你的实际代码中,你试图将“数组”设置为某些东西(可能通过malloc)在initArr中,在这种情况下我们有一个经典的问题:你正在通过值传递tp-&gt; table ,因此它不会被initArr更改:initArr在本地副本上运行tp-&gt;表,在initArr结束时被丢弃:)
编辑:
Doh - 现在你发布了更新,看起来我猜错了。 :/如果我做对了,想象一下荣誉! :)
答案 1 :(得分:0)
数组和指针相似但不同。
指针数组可以表示为内存中的多个连续指针(带有数组中第一个指针所在的地址)。
在这种情况下,tp-&gt;表与tp-&gt; table [0]完全相同,但假定为[0](因为它具有相同的地址)。在以这种方式实现的系统中,tp->;表指定一个地址,并且从该地址的偏移量(到达数组的元素)表示为一个值乘以数据类型大小(或一个指针的大小)你的情况)。
tp->table (the base address 0x00000100)
tp->table[0] (the address 0x00000100 + 0 * sizeof(... pointer ...) = 0x00000100)
tp->table[1] (the address 0x00000100 + 1 * sizeof(... pointer ...) = 0x00000104 (some systems only))
tp->table[2] (the address 0x00000100 + 2 * sizeof(... pointer ...) = 0x00000108 (some systems only))
因此,您的调试器实际上可能会打印出tp-&gt;表,这与tp-&gt; table [0]完全等效,具体取决于编译器的实现。