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
}

我的问题是我无法完全正确地制作原型我希望某个地方可以向我解释我的原型需要是什么?我刚刚开始学习指针并很好地理解了这个概念,只是从未使用过二维数组作为参数。谢谢你的帮助。

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

这是一个例子

#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

有几件事是错误的。

首先错了,你以错误的方式调用你的函数。

您不应该调用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

您必须在以您的方式清除数组时提供整数值。

如:

int map[5][10];

如果您想将这些值作为 row 和 col,首先您必须为 row 和 cols 定义宏。

宏:

#define ROW 5
#define COL 10

main() 中的声明:

int map[ROW][COL];

如果您打算从用户那里获取 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 回答