我知道如何創建可用於訪問的陣列的結構,例如數組:使用結構訪問用C
#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]爲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] .something。
只是出於好奇,你爲什麼要這樣做在真實的代碼? –
這都不是有效的;這都是未定義的行爲。 –
這個問題需要澄清。如果數組是來自某種外部設備的緩衝區,並且在其上覆蓋了一系列結構,則可能需要這樣做。 – Fred