C语言 二维数组名作为函数参数

  1、二维数组名作为函数参数

    二维数组名作为函数参数,在C语言中,我们可以使用二维数组的名字作为(实际参数)传递给函数中的(形式参数),

    而在这个过程中,二维数组名就代表着二维数组在内存中的地址,即数组的指针,所以,把二维数组名作为参数传递,

    其实,就是传递了二维数组的指针。

    

  2、例子

        void test( int (*a)[2] )

        {

         int b= *(*(a)+1);

         int c= *( *( a+1 ) );

         *(*(a+1)+1) = b + c;

        }

 

        int main()

        {

         int x=0;

         int y[2][2]={{1,2},{3,4}};         

         test( y );

         x=y[0][0]+y[1][1];   

        }

 

指针 a[2][2] 第1列 第2列
a  指向 第1行
a+1 指向 第2行
       
       

 

 

 

 

 

例子分析:

(1)首先,我们定义了一个函数test,同时参数部分定义了一个整型的指向带有2个元素的一维数组的指针变量a作为形参。

(2)在main函数中,定义了一个整型变量x并赋初值0,同时,再定义了一个整型二维数组y并赋初值5至8。

(3)然后,调用函数test,并将二维数组y作为参数传递给形参a。

(4)在函数test中通过*(*(a)+1)就指向了第1行第2列,因为,通过上面的表格,可以看到a指向第1行,

   然后,使用*(a)+1就指向第2列,然后,使用*(*(a)+1)就取出第1行第2列的元素值6,再赋给b。

   然后,再执行*(a+1)通过上面的表格,可以看到就是指向第2行,

   然后,再执行*(*(a+1))就是取出第2行第1列的元素值7,再赋给c。

   然后,再执行b+c,即6+7结果等于13,再保存回*(a+1)即第2行,然后,再执行*(a+1)+1即第2列,

   然后,再执行*(*(a+1)+1)即将5保存到第2行第2列中,通过上面的表格,可以看到原来第2行第2列的数值是8,

   所以,现在由8变为13。

(5)当test函数调用完以后,再执行y[0][0]+y[1][1],而当前y[0][0]是第1行第1列中的值,是5,

   而y[1][1]是第2行第2列中的值,是13而不再是8,

   所以,就是6+13结果等于19,再赋给整型变量x,所以,x里面最后的值是19。

 

=======================================================================

非常好,现在,我们已经掌握了C语言中的(二维数组名作为函数参数)但是,如何去运行用它呢?

所以,我们就需要通过下方的链接,进入到C语言的代码训练中,然后,通过实践去加深对该知识点的理解与运用。

>>>下载训练环境与使用说明(使用真实的开发环境,结合游戏闯关进行 编程训练)