C 二维数组名作为函数参数
1、二维数组名作为函数参数——二维数组名代表着二维数组在内存中起始地址,所以,可以使用二维数组名作为实参,传递给函数中的指针类型的参数。
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行 | 1 | 2 |
a+1 指向 | 第2行 | 3 | 4 |
例子分析:
(1)首先,我们定义了一个函数test,同时参数部分定义了一个整型的指向带有2个元素的一维数组的指针变量a作为形参。
(2)在main函数中,定义了一个整型变量x并赋初值0,同时,再定义了一个整型二维数组y并赋初值1至4。
(3)然后,调用函数test,并将二维数组y作为参数传递给形参a。
(4)在函数test中通过*(*(a)+1)就指向了第1行第2列,因为,通过上面的表格,可以看到a指向第1行,然后,使用*(a)+1就指向第2列,然后,使用*(*(a)+1)就取出第1行第2列的元素值2,再赋给b。
然后,再执行*(a+1)通过上面的表格,可以看到就是指向第2行,然后,再执行*(*(a+1))就是取出第2行第1列的元素值3,再赋给c。
然后,再执行b+c,即2+3结果等于5,再保存回*(a+1)即第2行,然后,再执行*(a+1)+1即第2列,然后,再执行*(*(a+1)+1)即将5保存到第2行第2列中,通过上面的表格,可以看到原来第2行第2列的数值是4,所以,现在为由4变为5。
(5)当test函数调用完以后,再执行y[0][0]+y[1][1],而当前y[0][0]是第1行第1列中的值,是1,而y[1][1]是第2行第2列中的值,是5而不再是4,所以,就是1+5结果等于6,再赋给整型变量x,所以,x里面最后的值是6。
非常好,现在,我们已经掌握了C中的“二维数组名作为函数参数”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用“二维数组名作为函数参数”去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)