Re: Написание пользовательской функции к MathCAD и двумерные массивы
От: icWasya  
Дата: 26.07.12 09:11
Оценка: 2 (1)
Здравствуйте, zzealot, Вы писали:

Z>Здравствуйте.

Z>...

Z>
Z>// complex scalar type
Z>typedef struct tagCOMPLEXSCALAR {
Z>    double real;
Z>    double imag;
Z>} COMPLEXSCALAR;

Z>// complex array type
Z>typedef struct tagCOMPLEXARRAY  {
Z>    unsigned int rows;
Z>    unsigned int cols;
Z>    double **hReal; // hReal[cols][rows],  == NULL when the real part is zero 
Z>    double **hImag; // hImag[cols][rows],  == NULL when the imaginary part is zero
Z>} COMPLEXARRAY;
Z>


Z>...


Z>Однако заметил, что в объявлении типа не указываются размеры массива, а просто :

Z>double **hReal;
Z>Отсюда вопрос — а как же компилятор генерирует код, например такой:
Y->hReal[i][j] = 555;
Z>ведь для этого как минимум надо знать величину второй размерности, т.е. Y->hReal[i][10]

Вот это

double **hReal;


не вытянутый в линию двумерный массив, а массив указателей на линейные массивы из double;
а за этим

Y->hReal[i][j] = Z;


стоит что-то вроде

  mov eax,Y
  mov edx,[eax+ offset (hReal)]
  mov ecx,[i]
  mov edx,[edx+ecx*4]
  mov ecx,[j]
  mov edx,[edx+ecx*8]
  lea eax,Z;
  mov [edx],[eax]
  mov [edx+4],[eax+4]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.