аргумент функции структуры массива - PullRequest
2 голосов
/ 07 января 2012

У меня следующий код объявлений:

struct coord {
int x;
int y;
}
void rotateFig(struct coord[10][10]);

Мне нужно реализовать rotateFig. Я пытался начать со следующего:

void rotateFig(struct coord[10][10] c)
{
   //code
}

Я не могу его скомпилировать - вероятно, неверно то, как я передаю c в определении функции. Как я должен передать c, используя данную сигнатуру. Спасибо

Ответы [ 3 ]

6 голосов
/ 07 января 2012

Используйте это определение:

void rotateFig(struct coord c[10][10])
{
   //code
}

Массив является фактическим параметром, поэтому размеры должны указываться после его имени, а не до.

3 голосов
/ 07 января 2012

Хотя других ответов достаточно, я предпочитаю передавать его как указатель и передавать размеры вместе с ним, это более динамично и то же самое для //code части:

void rotateFig(struct coord**, int, int);

void rotateFig(struct coord** c, int d1, int d2)
{
   //code
}
2 голосов
/ 07 января 2012

struct coord - это тип, а c - это переменная типа struct coord, которая может содержать 10 X 10 struct coord элементов.

Таким образом, оно должно быть следующим

При работе с многомерным массивом в C следует отметить, что его нельзя вернуть из функции.Подробнее читайте это .Поэтому не рекомендуется использовать вышеуказанный формат, поскольку C по умолчанию передает аргументы по значению, а не по адресу.

Так как @ Mr.TAMER упоминается в его ответе, вы должны использовать следующий

void rotateFig(struct coord** c, int d1, int d2)

OTOH, вы можете использовать следующий код поворота для справки!Он поворачивает двумерный массив на 90 градусов!

#include <stdio.h>

#define N 10 
int matrix[N][N];

void display()
{
    int i, j;

    printf("\n");
    for (i=0; i<N; i++) {
        for (j=0; j<N; j++) 
            printf("%3d", matrix[i][j]);
        printf("\n");
    }
    printf("\n");

    return;
}

int main()
{
    int i, j, val = 1;
    int layer, first, last, offset, top;

    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
            matrix[i][j] = val++;

    display();

    for (layer = 0; layer < N/2 ; layer++) {
        first = layer;
        last = N - layer - 1;
        for (i=first; i< last ; i++) {
            offset = i - first;
            top = matrix[first][i];

            matrix[first][i] = matrix[last-offset][first];
            matrix[last-offset][first] = matrix[last][last-offset];
            matrix[last][last-offset] = matrix[i][last];
            matrix[i][last] = top;
        }
    }

    display();
    return 0;
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...