【发布时间】:2017-10-01 15:30:29
【问题描述】:
换句话说:如果我有一个这样分配的数组,是否可以保证:
void *arr = calloc(nmemb, sizeof(some_type))
那么elta、eltb、eltc都将指向内存中的同一位置,这将是该数组的some_type类型的第二个元素?
some_type *elta = &((some_type*)arr)[1];
some_type *eltb = ((some_type*)arr)+1;
some_type *eltc = (char*)arr+sizeof(some_type);
我问这个的原因是因为我试图在 C 中做一个“容器”,如果这不成立,那么我不知道如何返回指向任何其他元素的指针,而不是第一个。
【问题讨论】:
-
为什么会有一些填充?当您
malloc(nmemb * sizeof(some_type))时,您没有填充。 -
数组在哪里?
-
((some_type*)arr)++你不能后增右值。 -
再问,这里的数组在哪里?
-
@gaazkam 指针不是数组,请注意。 :)
标签: c arrays padding memory-alignment pointer-arithmetic