如何在 C 中嵌套没有结构的双指针?
How to have nested double pointers without structs in C?
这里我有以下代码:
void **x;
void
push(void * value) {
void *a = x[1];
int *b = (int*)(&a[0]);
printf("%d\n", *b);
(((void*)&a))[*b + 1] = *value;
}
void
init() {
void **a;
void **b;
a = malloc(sizeof(void*) * 100);
b = malloc(sizeof(void*) * 100);
x = malloc(sizeof(void*) * 10000);
a[0] = (0);
b[0] = (0);
x[0] = a;
x[1] = b;
}
int
main(int argc, char **argv) {
init();
push(argv);
x[3] = "e";
x[4] = "e";
puts(x[4]);
}
本质上,我的目标是拥有一个任意大小的数组 x
,其中 可以包含任意嵌套元素 。然后我想将 init
中的 a
也视为双空指针,因此它也可以有任何东西。我计划简单地使它成为一个动态大小的整数数组。那么b
我要包含固定数量的任意元素
但是,我已经尝试了数十种指针和引用的组合,目前我只是在反复试验。在最新的配置之一上获取它。
$ make test
test/test.c:19:25: error: incomplete type 'void' is not assignable
(((void*)&a))[*b + 1] = *value;
~~~~~~~~~~~~~~~~~~~~~ ^
1 error generated.
make: *** [test] Error 1
我并没有真正掌握完成此任务的指针,想知道是否有人可以为我指明正确的方向。
当您尝试引用 a: &a
时,您必须强制转换 void **
而不是 void *
,因为 a
首先是一个指针。
所以,它会起作用(我不确定这是你想要的):
(((void**)&a))[*b + 1] = value;
这里我有以下代码:
void **x;
void
push(void * value) {
void *a = x[1];
int *b = (int*)(&a[0]);
printf("%d\n", *b);
(((void*)&a))[*b + 1] = *value;
}
void
init() {
void **a;
void **b;
a = malloc(sizeof(void*) * 100);
b = malloc(sizeof(void*) * 100);
x = malloc(sizeof(void*) * 10000);
a[0] = (0);
b[0] = (0);
x[0] = a;
x[1] = b;
}
int
main(int argc, char **argv) {
init();
push(argv);
x[3] = "e";
x[4] = "e";
puts(x[4]);
}
本质上,我的目标是拥有一个任意大小的数组 x
,其中 可以包含任意嵌套元素 。然后我想将 init
中的 a
也视为双空指针,因此它也可以有任何东西。我计划简单地使它成为一个动态大小的整数数组。那么b
我要包含固定数量的任意元素
但是,我已经尝试了数十种指针和引用的组合,目前我只是在反复试验。在最新的配置之一上获取它。
$ make test
test/test.c:19:25: error: incomplete type 'void' is not assignable
(((void*)&a))[*b + 1] = *value;
~~~~~~~~~~~~~~~~~~~~~ ^
1 error generated.
make: *** [test] Error 1
我并没有真正掌握完成此任务的指针,想知道是否有人可以为我指明正确的方向。
当您尝试引用 a: &a
时,您必须强制转换 void **
而不是 void *
,因为 a
首先是一个指针。
所以,它会起作用(我不确定这是你想要的):
(((void**)&a))[*b + 1] = value;