2014-09-30 4 views
0

Я хочу загрузить 3 массива 2d, которые должны быть массивами типа float типа 2d. Я хочу загрузить их как THREE 2d массивы с 3 в качестве общего числа 2d массивов. У меня эти 2d массивы как сырые файлы с именами array_10, array_100, array_140. Я пишу следующий код для загрузки одного массива: я не знаю, как загрузить все эти массивы вместе ... пожалуйста, проверьте мой код ниже, а также он показывает ошибку, если я помещаю ядро ​​массива в 2d Pointer **, Пожалуйста, помогитеЗагрузка многомерных массивов в C

int table=3, krow=99, kcol=99; 
float **kernel[table][krow]kcol]; 

if (table ==0) 
{ 
    sprintf(fn,"F:\\newresult\\fft\\array_10.raw"); 

    if ((f2=fopen(fn, "rb"))==NULL) 
    { 
     printf("file does not exists %s\n",fn); 
     exit(1); 
    } 

    for(int a = 0; a < krow; ++a) 
     for(int b = 0; b < kcol; ++b) 
      fread(&kernel[a][b], sizeof(float),1,f2); 

    fclose(f2); 

    for(int a = 0; a < krow; ++a) 
     for(int b = 0; b < kcol; ++b) 
      sum+=Kernel[a][b]; 

    for(int a = 0; a < krow; ++a) 
     for(int b = 0; b < kcol; ++b) 
      Kernel[a][b] /= sum; 
} 
+0

это действительно работает, как это? – chouaib

+0

нет его не работает. Его просто первый проект и его много ошибок – user3840066

+0

, так что же вы ждете, чтобы начать отладку? – chouaib

ответ

1

Это один очевидный фикс:

float kernel[table][krow][kcol]; 

вместо

float **kernel[table][krow]kcol]; 

Кроме того, если вы хотите, чтобы прочитать данные таблицы N, строка а и столбец Ь, вы можете прочитайте это так :

fread (& kernel [N] [a] [b], sizeof (float), 1, f2);

+0

ОК. Но тогда как я поместил бы свой массив в 2d-указатель? – user3840066

+0

и 'fread (& kernel [a] [b], sizeof (float), 1, f2);' to 'fread (& [table] [a] [b], sizeof (float), 1, f2);' – chouaib

+0

Спасибо. В ядре float kernel [table] [krow] [kcol] имеется ошибка; – user3840066

0

Несколько исправлений:

const int krow=99, kcol=99; 
float kernel[krow][kcol]; // <<< 2D array of float 
char fn[PATH_MAX]; 
FILE *f2; 
float sum; 

if (table == 0) 
{ 
    strcpy(fn, "F:\\newresult\\fft\\array_10.raw"); 

    if ((f2=fopen(fn, "rb"))==NULL) 
    { 
     printf("file does not exists %s\n",fn); 
     exit(1); 
    } 

    for(int a = 0; a < krow; ++a) 
     for(int b = 0; b < kcol; ++b) 
      fread(&kernel[a][b], sizeof(float), 1, f2); // <<< read one float 

    fclose(f2); 

    sum = 0; // <<< initialise sum 

    for(int a = 0; a < krow; ++a) 
     for(int b = 0; b < kcol; ++b) 
      sum+=kernel[a][b]; 

    for(int a = 0; a < krow; ++a) 
     for(int b = 0; b < kcol; ++b) 
      kernel[a][b] /= sum; 
} 
Смежные вопросы