c函数调用和函数原型与二维数组参数

问题描述:

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数组作为参数。谢谢你的帮助。c函数调用和函数原型与二维数组参数

+0

[传递2d数组]的可能重复(http://*.com/questions/3911400/passing-2d-arrays) – 2013-02-26 19:57:48

+0

传递2d数组的链接有一个答案这真的帮助了我。事实证明,我需要使用malloc来动态分配我的数组,并能够将它传递给一个函数。感谢大家的帮助! – 2013-02-26 20:24:40

正确的原型包括:

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

,并呼吁它:

setup_map(map); 

注意,但是,行数和列数必须是一个编译时间常数这工作。

+0

+1包括有效的原型,但OP也希望调用语句。添加这个将会完成你的回答 – exexzian 2013-02-26 20:00:31

+0

那么有没有办法让我仍然可以从用户那里得到大量的行和列?做一个指向2d数组的指针并传递指针? – 2013-02-26 20:00:58

+1

@Bingo谢谢,添加它。 – 2013-02-26 20:01:44

有几件事情是错误的。

第一件事情错了,你在呼唤在错误的方式你的函数。

你不应该叫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]); 

记住阵列的名称,是一个指针。

下面有一个例子

#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; 
} 

你必须给整数值,而declearing在你的方式做的数组。

如:

int map[5][10]; 

,如果你想给这些值作为行和山坳,首先你要定义行和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); 

,而这样做的函数实现用你的函数原型。只需添加大括号并开始填写。