C: bei der Initialisierung eines dynamischen Arrays innerhalb einer Struktur

Bin ich zu versuchen, meine eigenen basic-version der matrix-Multiplikation in C und basierend auf einem anderen Umsetzung, ich habe einen matrix-Datentyp. Der code funktioniert, aber ein C-Anfänger, ich verstehe nicht, warum.

Das Problem: Die habe ich ein struct mit einem dynamischen array drin und ich bin der Initialisierung der Zeiger. Siehe unten:

//Matrix data type
typedef struct
{
    int rows, columns;      //Number of rows and columns in the matrix
    double *array;          //Matrix elements as a 1-D array
} matrix_t, *matrix;

//Create a new matrix with specified number of rows and columns
//The matrix itself is still empty, however
matrix new_matrix(int rows, int columns)
{
    matrix M = malloc(sizeof(matrix_t) + sizeof(double) * rows * columns);
    M->rows = rows;
    M->columns = columns;
    M->array = (double*)(M+1); //INITIALIZE POINTER
    return M;
}

Warum muss ich das array initialisiert werden (double*)(M+1)? Es scheint, dass auch (double*)(M+100) funktioniert ok, aber z.B. (double *)(M+10000) funktioniert nicht mehr, wenn ich meine matrix-Multiplikation Funktion.

  • Bitte: deklarieren Sie nicht zwei Arten in einem typedef verstecken sich nicht ein Zeiger-Typ in einem typedef, nicht mit Namen mit _t, Sie sind reserviert von POSIX, und verwenden Sie size_t für rows und colums.
  • Nein, _t ist nicht reserviert für POSIX. Es ist eigentlich nicht reserviert für irgendwas. Obwohl, man sollte es nur verwenden, die in Typ-Namen. size_t ist nicht POSIX-zum Beispiel.
InformationsquelleAutor Zni | 2013-09-06
Schreibe einen Kommentar