【发布时间】:2014-04-22 02:04:31
【问题描述】:
我将使用什么数据类型来存储数组中其他元素的地址。
如,数组的元素 0 具有元素 5 的地址。以此类推..
【问题讨论】:
-
使用 size_t(即 int)元素并存储 index. 将其添加到数组地址中。
标签: c types addressing
我将使用什么数据类型来存储数组中其他元素的地址。
如,数组的元素 0 具有元素 5 的地址。以此类推..
【问题讨论】:
标签: c types addressing
元素的地址与元素的数据类型不同。所以你的代码将不得不涉及一些类型转换。
用最少的演员来做到这一点:
T some_object;
void *array[20];
array[0] = &some_object;
array[5] = &array[0];
// ....
T *some_ptr = *(void **)array[5];
【讨论】:
void * 和 T * 具有相同的表示和对齐要求。
void *,然后检索原始指针。但是,如果 OP 打算拥有更长的指针链,我的版本就没那么有用了,在这种情况下,他可能最好使用你的想法并做出这个假设。
指针可以转换为int(或者long,如果您正在使用64位并且您的c编译器将long定义为64位)。然后你只需要获取你试图指向的元素的地址。
int test[10];
test[0] = (int)&test[5];
【讨论】:
intptr_t 可能是更好的类型选择,因为该类型保证能够保存指针值。
uintptr_t吗?
intptr_t 是在系统上定义的,当且仅当有一个足够大的整数类型时。 AFAIK 使用这个和uintptr_t 没有区别