Можно ли определить уровень косвенности указателя во время выполнения, используя C? - PullRequest
0 голосов
/ 28 января 2020

Можно ли объявить указатель на указатель на -...- на- [тип данных], уровень косвенности которого определяется во время выполнения?

Это мысленный эксперимент; Я знаю, что это, вероятно, ужасная практика, и я не собираюсь использовать ее для чего-либо. Но я провел несколько часов, размышляя об этом и злоупотребляя макросами препроцессора, и пришел пустым, поэтому мне любопытно, если кто-нибудь может понять, как это сделать:

Напишите программу, которая принимает в качестве входных данных int m (до 255) из stdin и объявляет указатель с m -уровневым указателем на int. т. е. если введено значение 4, оно должно объявить int ****x; в области видимости верхнего уровня main().

1 Ответ

0 голосов
/ 28 января 2020

Вы не можете изменять объявления во время выполнения. Но вы можете сделать что-то вроде:

#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 <= 5\n");
                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 ("%d\n", dereferenced);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...