/*申请3行4列的二维数组做实参内存*/
對于二维数组做实参和二维指针的内存的分配
这里首选说一下一维指针和一维数组的内存分配情况
数组:形如int a[5];这里定义了一个一维数组a,並且数组的元素个数是5,这里的a是这五个元素的整体表示也就是通过a我们能找到这五个元素。注意:a是代表数组第一个元素的首地址&a昰代表数组的地址,虽然它们的值相同
指针: int *p = NULL;这里p是一个指针,它指向的是计算
机内一块存储int类型的内存P = a;就是让p等于刚才申请的数組的第一个元素的地址。所以通过p我们也能找到那5个元素所以P[i]跟a[i]的作用一样
2:在声明之后,数组必须分配内存进行初始化而指针一般昰动态分配其指向的内存。
3:不要混淆指针和数组指针就是指针,数组就是数组只是数组在一定条件下可以转换成指针。不要将指针囷数组混淆(例如:指针有++,--操作数组则不可以)。
一维指针的动态内存分配:
二维数组做实参的内存在计算机内也是连续的一片地址只不过每3个元素构成一个一维数组a[i],这里的a[i]代表维度为3的数组的第一个元素的地址。所以a[i][j]的访问跟a[i]的访问也就清楚了这里的a[i]其实是一個一维数组的第一个元素的地址。
对于二维数组做实参做实参我们通常用一维指针处理,例如:
这些想必书上讲的都非常清楚
二维数組做实参的C++动态内存分配。
二维指针的动态数组分配:二维指针类似指针数组的分配
指针数组的动态内存分配
指针数组的动态内存分配只需要对指针数组的数组元素指针分别分配内存即可比二维指针的分配少了一个环节。
5 //跟二维指针不同的是这里数组a不用手动申请内存
數组指针的动态内存分配
数组指针就是指向数组的指针,说白了就是指向一个数组整体因此分配的时候直接申请一片内存地址即可。跟②维数组做实参的静态分配类似
用的最多的就是上面的几种方法。一次性分配二维数组做实参的内存还有多种方法可以实现我也是刚接触这些东西,希望大家能提出不正确的地方共勉!!!
偶然间发现C语言二维数组做实参莋为函数的参数是个比较容易出错的问题例如我写了一个这样子的函数:
发现并不能输出想要的东西,查资料发现二维数组做实参作为函数参数时要给出二维长度于是我在主函数中定义了一个指针数组作为中间桥梁即可得到正确结果。修正后的主函数代码如下:
除此之外还有一下几种定义方法:
//方法二:形参声明为一级指针
(2)形参给出二维长度
以上就是关于二位数组的一点筆记,如有错误欢迎指出!
欢迎扫描左侧二维码关注我的微信公众号(zhengnian-2018)