二维数组作为参数在C语言函数中如何传递

2016/4/3 1:18 上午 posted in  C/C++ comments

今天做了几道处理字符串的面试题,发现自己已经忘了二数组如何在C语言函数中作为参数传递。
现在把方法整理出来,以备能很快地回忆起来。

void printArray(int a[3][2]);
void printArray(int a[][2]);
void printArray(int (*a)[2]);

以上三种方式都可以将二维数组传入函数中,其中int a[][2]是int (*a)[2]的语法糖。


#include<stdio.h>
void printArray(int a[][2]){
        for(int i=0; i<3; ++i){
                for(int j=0; j<2; ++j){
                        printf("%d\n", a[i][j]);
                }
        }
}
int main(){
        int test[][2] = {{8, 21}, {43, 54}, {89,23}};
        printArray(test);
        return 1;
}

手工寻址

#include<stdio.h>
void printArray(int **a, int m, int n){
        for(int i=0; i<m; ++i){
                for(int j=0; j<n; ++j){
                        printf("%d\n", *((int*)a+i*n+j));
                }
        }
}
int main(){
        int test[][2] = {{8, 21}, {43, 54}, {89,23}};
        printArray((int**)test, 3, 2);
        return 1;
}

int **a;

*a表明a是一个指针,*(*a)表明a指针指向的内存单元(*a)的内容存放的也是一个指针。