Я определил два typedef struct
с, а второй имеет первое как объект:
typedef struct
{
int numFeatures;
float* levelNums;
} Symbol;
typedef struct
{
int numSymbols;
Symbol* symbols;
} Data_Set;
Затем я определил numFeatures
и numSymbols
и выделил память для symbols
иlevelNums
, затем заполните levelNums
внутри цикла for значением индекса внутреннего цикла, чтобы убедиться, что он работает должным образом.
Data_Set lung_cancer;
lung_cancer.numSymbols = 5;
lung_cancer.symbols = (Symbol*)malloc( lung_cancer.numSymbols * sizeof( Symbol ) );
lung_cancer.symbols->numFeatures = 3;
lung_cancer.symbols->levelNums = (float*)malloc( lung_cancer.symbols->numFeatures * sizeof( float ) );
for(int symbol = 0; symbol < lung_cancer.numSymbols; symbol++ )
for( int feature = 0; feature < lung_cancer.symbols->numFeatures; feature++ )
*(lung_cancer.symbols->levelNums + symbol * lung_cancer.symbols->numFeatures + feature ) = feature;
for(int symbol = 0; symbol < lung_cancer.numSymbols; symbol++ )
for( int feature = 0; feature < lung_cancer.symbols->numFeatures; feature++ )
cout << *(lung_cancer.symbols->levelNums + symbol * lung_cancer.symbols->numFeatures + feature ) << endl;
return 0;
Когда levelNums
равны int
, я получаю то, что ожидаю (то есть 0,1,2,0,1,2, ...), но когда они равны float
, толькопервые 3 верны, а остальные очень маленькие или очень большие значения, а не 0,1,2, как ожидалось.Затем у меня есть два вопроса:
- Когда выделяется память для
symbols
, как он узнает, насколько велик Symbol
, поскольку я еще не определил, насколько большим будет levelNums
. - Как правильно получить
float
значения в levelNums
.
Причина, по которой я это делаю, заключается в том, что это структура данных, которая будет отправлена в графический процессор дляПрограммирование GPGPU в CUDA и массивах не распознаются.Я могу только явно отправлять непрерывный блок памяти, а typedef struct
только для передачи / определения структуры памяти данных.