#c
#c
Вопрос:
Я получаю синтаксическую ошибку при попытке выделить пространство для многомерной матрицы. Я новичок в программировании на C, так что все, что угодно, поможет. Ошибка возникает при попытке получить доступ к элементам структуры матрицы в функции read_matrix. Синтаксическая ошибка: «выражение должно иметь тип struct или union». Место, где возникает ошибка, закомментировано в функции read_matrix.
typedef struct {
int *elements;
int rows;
int columns;
} matrix;
void main() {
matrix a, b, c;
void read_matrix(matrix *);
void deallocate(matrix *);
void print(matrix);
matrix add(matrix, matrix);
matrix subtract(matrix, matrix);
matrix multiply(matrix, matrix);
read_matrix(amp;a);
read_matrix(amp;b);
c = add(a, b);
deallocate(amp;c);
c = subtract(a, b);
deallocate(amp;c);
c = multiply(a, b);
}
void read_matrix(matrix *z) {
int d1, d2, i, x, y, val;
printf("What is the first dimension of the array? ");
scanf("%d", amp;d1);
printf("What is the second dimension of the array? ");
scanf("%d", amp;d2);
*z.elements = (int *)calloc(d2, sizeof(int));
*z.rows = d1;
*z.columns = d2;
/* error here. It isn't letting me access the
elements/rows/columns of the matrix */
/* additional code below here */
}
Комментарии:
1. И синтаксическая ошибка? (пожалуйста, дословный текст)
2. Совсем не похоже на C #… Пожалуйста, проверьте название языка, написанное в вашем учебнике.
3. @AlexeiLevenkov OP уже заявил, что это c. Я удалил нерелевантные теги.
4. Синтаксическая ошибка — «выражение должно иметь тип struct или union». Извините
5. Во-первых, не добавляйте важную информацию в качестве комментария. Отредактируйте свой вопрос и добавьте его в вопрос. Во-вторых, также добавьте, какая строка кода вызывает эту ошибку. Мы здесь не читатели мыслей.
Ответ №1:
Оператор .
имеет более высокий приоритет, чем унарный оператор *
, что означает, что если вы хотите получить доступ к элементам структуры через указатель z
, используя *
-и- .
комбинацию, вы должны использовать круглые скобки. Это ваш случай, так и должно быть
(*z).elements = ...
В качестве альтернативы вы можете использовать ->
operator
z->elements = ...
И так и должно быть int main()
, а не void main()
Комментарии:
1. Спасибо, это устранило мою проблему!
2. @M. Diet: Ваш код страдает и от других проблем. Я не понимаю, как
d1
влияет на выделение памяти для матрицы. На самом деле это не так. Это кажется неправильным, поскольку выделение памяти для матрицы обычно зависит от обоих размеров матрицы.3. Да, я также узнал об этом в приведенных выше комментариях. Спасибо за совет!