"Выражение должно иметь тип указателя на объект" - C (СИ)
Формулировка задачи:
Добрый вечер!
При написании кода возникло ряд проблем , как только не пытался исправить , но всё равно не получается.Надеюсь на вашу помощь и объяснения что именно не так в ней)Заранее спасибо))
выражение должно иметь тип указателя на объект 58
выражение должно иметь тип указателя на объект 38
выражение должно иметь тип указателя на объект 42
выражение должно иметь тип указателя на объект 51
выражение должно иметь тип указателя на объект 52
выражение должно иметь тип указателя на объект 52
выражение должно иметь тип указателя на объект 53
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <Windows.h>
#include <math.h>
#include <malloc.h>
#include <stdlib.h>
int main()
{
setlocale(LC_ALL, "rus");
int *a;
int i, j, n, m;
int count1, count2, temp = 0;
printf("Введите кол-во столбцов :\n");
scanf("%d", &n);
printf("Введите кол-во строк :\n");
scanf("%d", &m);
a = (int*)malloc(n*m * sizeof(int));
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%d", (a + i*m + j));
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%5d ", *(a + i*m + j));
}
}
for (i = 0; i < n; i++)
{
if (a[i][0]<0)
{
count1++;
}
if (a[n - 1][m < 0])
{
count2++;
}
}
if ((count1 = (n - 1)) && (count2 = (n - 1)))
{
for (i = 0; i < n; i++)
{
temp = a[i][1];
a[i][1] = a[n - 1][m];
a[n - 1][m] = temp;
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("%d", &a[i][j]);
}
}
system("pause");
return 0;
}Решение задачи: «"Выражение должно иметь тип указателя на объект"»
textual
Листинг программы
typedef struct DynArray {
int * data;
int n, m;
} DynArray;
int * at(DynArray* a, int i, int j) {
return a->data + i * a->m + j;
}
// ....
*at(a, i, j) = 42;
Объяснение кода листинга программы
- В данном коде определен тип структуры
DynArray, которая содержит указатель на массив, его размер и количество элементов. - В структуре
DynArrayуказательdataуказывает на начало массива, а переменныеnиmхранят размер массива и количество элементов соответственно. - Функция
atпринимает указатель на структуруDynArray, индексыiиjи возвращает указатель на элемент массива с учетом его размера и количества элементов. - Значение переменной
at(a, i, j)присваивается значение 42.