Я пытаюсь реализовать свою собственную базовую версию умножения матрицы в C и на основе другой реализации, я создал тип данных матрицы. Код работает, но, будучи новичком C, я не понимаю, почему.C: Инициализация динамического массива внутри структуры
Проблема: У меня есть структура с динамическим массивом внутри, и я инициализирую указатель. Смотрите ниже:
// 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;
}
Почему мне нужно инициализировать массив (двойной *) (М + 1)? Кажется, что также (double *) (M + 100) работает нормально, но, например, (double *) (M + 10000) больше не работает, когда я запускаю функцию матричного умножения.
Пожалуйста: не объявлять два типа в одном ЬурейиХ, не скрывает типа указателя в ЬурейеМ, не используйте имена с _t, они защищены от POSIX, а также использовать 'size_t' для 'rows' и' colums'. –
Нет, '_t' не зарезервирован для POSIX. На самом деле это не зарезервировано ни для чего. Хотя, его следует использовать только в именах типов. Например, 'size_t' не является POSIX. – Jocke