【原创】杨辉三角之函数调用版本

本文探讨了如何通过函数调用来实现杨辉三角的动态生成,重点在于理解二级指针和二维数组的关系。文章指出,通过传递二级指针和额外的维度信息,可以解决二维数组作为函数参数时的灵活性问题。文中给出了具体的代码示例,并展示了编译器如何对二维数组寻址。最后,代码实现了杨辉三角的显示,验证了函数调用的正确性。
摘要由CSDN通过智能技术生成

平时比较常见的是杨辉三角的题目的程序,都是直接用main函数来书写的,这是很鸡肋的办法,其实要是失业相应的函数调用来写,你就会发现,使用main的方法的数组调整的方式,如果移植到函数调用里,几乎在现实中式完全不能够运行的

其中难点就再于二级指针和二维数组的区别,转换,如何进行接引,反解引的问题,其实这个问题你如果明白了,你就相当于明白了C或者C++编译器是如何解释和读取二维数组的数组内容,编译器是如何实现对二维数组的的定位等等问题。

希望对新入代码业的朋友们能有些帮助,如有纰漏,不吝赐教,谢谢!

 

下面是关键的知识点

对于数组 int p[m][n];

如果要取p[i][j]的值(i>=0 && i<m && 0<=j && j < n),编译器是这样寻址的,它的地址为:

   p + i*n + j;

从以上可以看出,如果我们省略了第二维或者更高维的大小,编译器将不知道如何正确的寻址。但是我们在编写程序的时候却需要用到各个维数都不固定的二维数组作为参数,这就难办了,编译器不能识别阿,怎么办呢?不要着急,编译器虽然不能识别,但是我们完全可以不把它当作一个二维数组,而是把它当作一个普通的指针,再另外加上两个参数指明各个维数为二维数组手工寻址,这样就达到了将二维数组作为函数的参数传递的目的,根据这个思想,我们可以把维数固定的参数变为维数随即的参数,例如:

    void Func(int array[3][10]);

    void Func(int array[][10]);

变为:

    void Func(int **array, int m, int n);

在转变后的函数中,array[i][j]这样的式子是不对的,因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:

    *((int*)array + n*i + j);

 

 

下面是我的代码,最后面的注释是程序的输出:

 

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值