Я понимаю, как создать структуру, которая может использоваться для доступа к массиву, например:
#include <stdio.h>
typedef struct {
int i;
int j;
int k;
} MyStruct;
int main()
{
MyStruct *ms;
int array[9];
int i;
for(i=0;i<9;++i) array[i] = i;
ms = (MyStruct *)array;
for(i=0;i<3;++i) printf("%d %d %d %d\n",i,ms[i].i,ms[i].j,ms[i].k);
return 0;
}
, которая позволяет мне получить доступ к массиву [0] как ms [1] .i и массиву [1] as ms [1] .j и т. Д. Однако, как я могу сделать то же самое, если я хочу использовать массив в структуре, которая известна во время выполнения, но не во время компиляции?Что-то вроде:
#include <stdio.h>
typedef struct {
int *myArgs;
} MyStruct;
int main()
{
MyStruct *ms;
int array[9];
int i;
for(i=0;i<9;++i) array[i] = i;
ms = (MyStruct *)array;
for(i=0;i<3;++i) printf("%d %d %d %d\n",i,ms[i].myArgs[0],ms[i].myArgs[1],ms[i].myArgs[2]);
return 0;
}
, который в этом примере я знал бы во время выполнения, что myArgs имеет длину 3. Но также возможно, что myArgs имеет длину 9, в этом случае ms должен быть длиной 1.
Редактировать:
Я храню набор решений для решателя PDE, который имеет ряд известных значений во время компиляции, а затем неизвестное число дополнительных функций.Например, мой массив будет иметь X, Y, Z, но тогда он может иметь еще 3, 5 или 10 вещей после этого.Итак, я хотел предоставить структуру, которая позже предоставит доступ к полям для удобства чтения, например, solution.x, solution.y, solution.z, solution.chemicalSpecies [0], solution.chemicalSpecies [1] и т. Д.Количество видов полностью неизвестно во время компиляции.
Я использую внешнюю библиотеку, которая хранит число неизвестных в виде массива, и я могу вернуть массив в виде [k] [j] [i] [numUnknowns], и было бы неплохопредоставить доступ как решение [k] [j] [i]. что-то.