Я пытаюсь выяснить, как получить доступ к матрице, которая хранится в поле в структуре matlab из функции mex.
Это ужасно затянуто ... Позвольте мне объяснить:
У меня есть структура matlab, которая была определена следующим образом:
matrixStruct = struct('matrix', {4, 4, 4; 5, 5, 5; 6, 6 ,6})
У меня есть функция mex, в которой я хотел бы получить указатель на первый элемент в матрице (matrix [0] [0], в терминах c), но мне не удалось выяснить, как это сделать.
Я пробовал следующее:
/* Pointer to the first element in the matrix (supposedly)... */
double *ptr = mxGetPr(mxGetField(prhs[0], 0, "matrix");
/* Incrementing the pointer to access all values in the matrix */
for(i = 0; i < 3; i++){
printf("%f\n", *(ptr + (i * 3)));
printf("%f\n", *(ptr + 1 + (i * 3)));
printf("%f\n", *(ptr + 2 + (i * 3)));
}
Что в итоге печатает, так это:
4.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
Я также попробовал варианты следующего, думая, что, возможно, это было что-то странное с вызовами вложенных функций, но безрезультатно:
/* Pointer to the first location of the mxArray */
mxArray *fieldValuePtr = mxGetField(prhs[0], 0, "matrix");
/* Get the double pointer to the first location in the matrix */
double *ptr = mxGetPr(fieldValuePtr);
/* Same for loop code here as written above */
Кто-нибудь имеет представление о том, как я могу добиться того, что я пытаюсь, или что я потенциально делаю неправильно?
Спасибо!
Редактировать: Согласно комментарию Юка, я попытался выполнить аналогичные операции над структурой, которая имеет поле под названием массив, который является одномерным массивом значений типа double.
Структура, содержащая массив, определяется следующим образом:
arrayStruct = struct('array', {4.44, 5.55, 6.66})
Я попробовал следующее в arrayStruct из функции mex:
mptr = mxGetPr(mxGetField(prhs[0], 0, "array"));
printf("%f\n", *(mptr));
printf("%f\n", *(mptr + 1));
printf("%f\n", *(mptr + 2));
... но вывод следовал тому, что было напечатано ранее:
4.440000
0.000000
0.000000