c中的函数调用和函数原型,带有2d数组参数

时间:2013-02-26 19:53:50

标签: c arrays syntax function-prototypes

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 个答案:

答案 0 :(得分:4)

正确的原型包括:

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

并称之为:

setup_map(map);

但是,请注意,行和列的数量必须是编译时常量才能生效。

答案 1 :(得分: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] );

请记住,数组的名称是指针。

答案 2 :(得分: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;
}

答案 3 :(得分: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);

在执行函数实现时使用函数原型。只需添加花括号并开始填写。