C语言-使用二维数组作为函数参数

在做数据处理的时候,经常使用C语言的二维数组,比如传入汉字的字模等数据。不同于一维数组,一维数组作为函数参数时,只需要传入数组名即可。但是使用二维数组的数组名,作为传入函数的指针时有一些麻烦。

首先要明确一下二维数组的变量类型,以下面的例子为例,它的类型是 int (*)[10] ,即与数组名a等价的变量类型应该是“一个指向包含10个int元素的指针”。

int a[2][10] //数组名a的类型是int (*)[10]

注意这里等价的指针里需要包含二维数组的一个维度,所以传入函数的二维数组需要包含第2维的大小。起始这个也是可以理解的,因为二维数组在内存中是连续的,如果我们想通过二维数组的第一个维度去索引这个数组,那么肯定需要知道第2维度的大小,这样代码才知道变换不同的第一维的位置,需要挪动多少个字节。所以二维数组作为函数参数时,其函数的原型应该是下面这样的:

void display_word_page(uint8_t (*page)[16]) // page变量是一个二维数组

同样,作为强制类型转换的时候其类型应为

(uint8_t(*)[16])

在上面的方法中,二维数组的变量类型太长了,如果想简洁一些,可以对二维数组类型进行类型定义,例如

typedef char BUF[3][10]; //将char型的二维数组定义为BUF类型 
void copy_ddram_buf(BUF src) //可以使用BUF这个类型作为函数的参数类型,注意BUF后面没有加'*'(星号) 
{ 
    // ... 
}

这时,只需要传入二维数组的名字就行。注意作为函数参数的BUF类型变量并没有 * ,这时因为二维数组名本身就是指针了,不需要在取地址了。

二维数组的使用不同于一维数组。一维数组是占用一个连续的内存,在内存中像一条线一样,而二维数组则是将一条线分成了等长的多个段。因此为了在代码中对不同的分段进行访问,代码必须要知道分段的大小,因此作为参数的时候,必须指定其第2个维度的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值