是否可以使用 C 在运行时确定指针的间接级别?



是否可以声明一个指针到指针-...-到[数据类型],其间接级别在运行时决定?

这是一个思想实验;我知道这可能是可怕的做法,我无意实际使用它做任何事情。但是我花了几个小时思考它并滥用预处理器宏并得到空,所以我很好奇是否有人可以弄清楚如何做到这一点:

编写一个程序,该程序将stdin中的intm(最多 255 个(作为输入,并声明一个指向intm级定向指针,即如果输入为 4,则应在main()的顶级范围内声明int ****x;

不能在运行时更改声明。 但你可以做这样的事情:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
int count = argc > 1 ? strtol(argv[1], NULL, 0) : 5;
int d = argc > 2 ? strtol(argv[2], NULL, 0) : 10;
void *f[10];
int dereferenced;
if( count > 5 ) {
fprintf(stderr, "levels of direction must be <= 5n");
exit(EXIT_FAILURE);
}
f[0] = &d;
for(int i = 1; i < 10; i++) {
f[i] = f + i - 1;
}
switch(count) {
case 1:dereferenced = *(int *)f[0];
case 2:dereferenced = **(int **)f[1];
case 3:dereferenced = ***(int ***)f[2];
case 4:dereferenced = ****(int ****)f[3];
case 5:dereferenced = *****(int *****)f[4];
}
printf ("%dn", dereferenced);
}

最新更新