5
void setup_map (int *map); <--- prototype

int row, col;  <-- global variables

some main 
{
  //get number of rows and cols from user
  int map[rows][cols]; //create map here because another function uses it
  setup_map (map[row][col]);
}

void setup_map (int map[row][col])
{
  loop through and set up map
}

私の問題は、プロトタイプを完全に正しく取得できないことです。どこかでプロトタイプが何である必要があるかを説明できると期待していました。私はポインタについて学び始めたばかりで、その概念をかなりよく理解しています。引数として2D配列を使用したことはありません。助けてくれてありがとう。

4

4 に答える 4

4

正しいプロトタイプは次のとおりです。

void setup_map(int map[ROWS][COLS]);
void setup_map(int map[][COLS]);
void setup_map(int (*map)[COLS]);

そしてそれを呼ぶために:

setup_map(map);

ただし、これが機能するには、行と列の数がコンパイル時定数である必要があることに注意してください。

于 2013-02-26T19:57:05.597 に答える
1

いくつか間違っていることがあります。

まず間違っているのは、関数を間違った方法で呼び出していることです。

配列名はポインタであり、配列名と[]演算子はメモリ上の特定の場所の内容をフェッチするため、setup_map (map[row][col]);代わりに呼び出す必要はありません。setup_map (map);

次に、プロトタイプと定義を同じように見せるために、コンパイラはプロトタイプ(後で定義ではなく)を使用してコードが正しいかどうかを解析し、プロトタイプが間違っている場合は間違った結論を出すためです。

プロトタイプ自体について:

関数が固定サイズの配列を期待する必要がある場合は、コンパイル時定数を使用する必要があります。

このような:

void setup_map( int map[23][9]);

またはこれ:

#define ROWS = 23;
#define COLS = 9;
void setup_map( int map[ROWS][COLS] );

配列の名前はポインタであることを忘れないでください。

于 2013-02-26T19:59:02.070 に答える
1

ここに例があります

#include <stdio.h>

void print_matrix(int x, int y, int matrix[][x])
{
    int i, j;

    for (i = 0; i < y; ++i) {
        for (j = 0; j < x; ++j) {
            printf("[%i]", matrix[i][j]);
        }
        putchar('\n');
    }
}

int main()
{
    int matrix[][2] = {{0, 1}, {2, 3}};
    print_matrix(2, 2, matrix);
    return 0;
}
于 2013-02-26T20:05:57.067 に答える
1

配列をクリアするときに整数値を指定する必要があります。

そのような:

int map[5][10];

これらの値を行と列として指定する場合は、最初に行と列のマクロを定義する必要があります。

マクロ:

#define ROW 5
#define COL 10

main()での宣言:

int map[ROW][COL];

ユーザーから行と列の値を取得することを計画している場合は、malloc()関数とfree()関数を使用して動的メモリ割り当てを行う必要があるため、状況が少し複雑になる可能性があります。

int main()
{
    int *map;
    int row, col;

    printf("enter row and col value:");
    scanf("%d %d", &row, &col);

    map = (int *) malloc(row * col * sizeof(int));

    //use the array

    free(map);
    return 0;
}

関数プロトタイプの例:

void setMap(int *map, int row, int col);

関数の実装を行うときは、関数プロトタイプを使用してください。中かっこを追加して、入力を開始するだけです。

于 2017-05-03T11:19:16.297 に答える