"Выражение должно иметь тип указателя на объект" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! При написании кода возникло ряд проблем , как только не пытался исправить , но всё равно не получается.Надеюсь на вашу помощь и объяснения что именно не так в ней)Заранее спасибо))
#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;
}
выражение должно иметь тип указателя на объект 58 выражение должно иметь тип указателя на объект 38 выражение должно иметь тип указателя на объект 42 выражение должно иметь тип указателя на объект 51 выражение должно иметь тип указателя на объект 52 выражение должно иметь тип указателя на объект 52 выражение должно иметь тип указателя на объект 53

Решение задачи: «"Выражение должно иметь тип указателя на объект"»

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;

Объяснение кода листинга программы

  1. В данном коде определен тип структуры DynArray, которая содержит указатель на массив, его размер и количество элементов.
  2. В структуре DynArray указатель data указывает на начало массива, а переменные n и m хранят размер массива и количество элементов соответственно.
  3. Функция at принимает указатель на структуру DynArray, индексы i и j и возвращает указатель на элемент массива с учетом его размера и количества элементов.
  4. Значение переменной at(a, i, j) присваивается значение 42.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы