Использование -> для указателя структуры gsl_matrix - PullRequest
0 голосов
/ 13 октября 2011

Я хочу иметь ярлык для назначения значений указателю данных gsl_matrix вместо записи gsl_matrix_set 16 раз, но я не могу заставить его работать.Небольшой автономный образец:

#include <stdio.h>
#include <stdlib.h>
#include <gsl/gsl_linalg.h>
#include <gsl/gsl_matrix.h>

gsl_matrix* get_rates(double k) {

    int nChar = 4;
    gsl_matrix *rates = gsl_matrix_calloc(nChar, nChar);

//TODO: this apparently fails
    rates->data = (double[]) {-1, k/(k+2), 1/(k+2), 1/(k+2),
        k/(k+2), -1, 1/(k+2), 1/(k+2),
        1/(k+2), 1/(k+2), -1, k/(k+2),
        1/(k+2), 1/(k+2), k/(k+2), -1};

    return (rates);

}

int main(void) {

    gsl_matrix *rates;

    rates = get_rates(2.0);

    gsl_matrix_fprintf (stdout, rates, " %f");

        return(0);
}

возвращает:

-1.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000
 0.000000

1 Ответ

1 голос
/ 13 октября 2011
double data[16] = {
    -1, k/(k+2), 1/(k+2), 1/(k+2),
    k/(k+2), -1, 1/(k+2), 1/(k+2),
    1/(k+2), 1/(k+2), -1, k/(k+2),
    1/(k+2), 1/(k+2), k/(k+2), -1};

memcpy(rates->data, data, sizeof data);

Ссылки:

...