【发布时间】:2020-11-28 05:05:46
【问题描述】:
我分配结构数组并尝试使用数组索引器语法ptr[i]->a 访问元素,但它不起作用。
另一方面,当我使用指针算法(ptr + i)->a 时,它可以工作。
我之所以尝试使用数组方式访问,是因为我认为struct在堆内存中是连续分配的。
我的假设错了吗?
谁能告诉我原因?
#include <stdlib.h>
typedef struct sample_t{
int a;
} Sample;
void Function(Sample *ptr)
{
int i;
Sample *tmp = ptr;
for(i = 0; i<100; i++)
{
(tmp + i)->a = i; //work!!
}
for(i = 0; i<100; i++)
{
ptr[i]->a = i; //doesn't work!!
}
}
int main(void)
{
Sample *arr = (Sample *)calloc(100, sizeof(Sample));
Function(arr);
}
【问题讨论】:
-
除非我误读了某些内容,否则您需要
ptr[i].a = i;—ptr[i]是Sample,而不是指向Sample的指针。你说“不起作用”,但你没有说它不起作用。 -
"我之所以尝试使用数组方式访问,是因为我认为struct在堆内存中是连续分配的。"是的,但由于结构成员之间的对齐和填充,它不会为您提供最佳性能。不过,这不适用于您的情况。
-
您能告诉我们“不起作用”是什么意思吗?它崩溃了?