c语言中怎么用二维数组作为函数参数

c语言中怎么用二维数组作为函数参数,第1张

二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:

它们是合法且等价,也可以使用如下形式:

但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:

因为从实参传递来的是数组的起始地址,如果在形参中不说明列数,编译器将无法定位元素的的位置。

#include <stdioh>

#include <stdlibh>

#include <stringh>

void fun(int x[][3])

{

    int i, j;

    for (i = 0; i < 2; i++)

    {

        for (j = 0; j < 3; j++)

        {

            printf("%d ", x[i][j]);

        }

        printf("\n");

    }

}

int main()

{

    int a[2][3] = {1, 2, 3, 4, 5, 6};

    fun(a);

    return 0;

}

定义形参的时候定义列的数目即可,其实就算你随便定义行和列的大小也可以运行,只要将数组地址传进去即可

#include <stdioh>

#include <stdlibh> // for malloc()

 

// 返回一个hilbert类型的(n  n)阶矩阵

double hilbert(int n) {

    int i,j;

double arr = (double )malloc(n  sizeof(double ));

    for(i = 0; i < n; i++) {

arr[i] = (double )malloc(n  sizeof(double));

        for(j = 0; j < n;j++) {

            arr[i][j] = 10/(i + j + 1);

        }

    }

return arr;

}

// 显示二维数组信息

void show(double a,int n) {

int i,j;

for(i = 0; i < n; ++i) {

for(j = 0; j < n; ++j)

printf("%4lf   ",a[i][j]);

printf("\n");

}

printf("\n");

}

// 释放动态内存

void freememory(double a,int n) {

int i;

for(i = 0; i < n; ++i)

free(a[i]);

free(a);

}

 

int main () {

    double a;

    a = hilbert(8);

    show(a,8);

freememory(a,8);// 内存释放动态,避免内存泄漏

a = hilbert(5);

    show(a,5);

freememory(a,5);// 内存释放动态,避免内存泄漏

    return 0;

}

属于地址传递,在函数里修改的话,将直接影响调用方的数值。这是因为数组名代表这个数组的首地址,不过是静态不可更改的而已。在函数里用引用[i]下标时,就是找到这个数组第i号元素的地址进行修改的。所以是第于是地址传递。

void fun(int s)

{

    s[0][0]=;

    s[0][1]=;

}

main()

{

    int a[5][5];

    fun(a);

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存