维度不固定的多维数组形参笔记

在利用多维数组作为函数形参时遇到了点问题,如:

void fun(char str[][10]);

这个函数可以传入多维数组,但元素个数必须是固定的,假如传入一个str[][20],元素个数不一样的数组,那么这个函数就不适用了,且会报错。

假如我有多个元素个数都不一致的多维数组都需要调用这个函数进行处理,这个形参问题就凸显出来了,总不能创建N个不同的函数来进行处理吧?这样也太繁琐了,而且也适用度不高。

在查找了一些资料后受到了一点启发。

所有数据在存储空间里面都是有地址的,那么就可利用指针寻址来获取到相应的数据。

而这里也可利用指针来指向多维数组。

假设三维数组为:

int a[3][3]={{0,1,2},{3,4,5},{6,7,8}};

(1)用指针b表示三维数组时为:

 int *b=a[0];   //将指针b指向a的首地址

三维数组中的某个元素的表示方式为:

  a[i][j]=*(b+3*i+j) ;    //因为二维数组也是存放在连续地址上,只需要移动指针位置就可以了,这里的3是数组的元素个数

现在开始将这个多维数组作为形参传递给fun函数,则可以如下适用:

#include <stdio.h>
#include <math.h>
#include <string.h>

//b 为指针
//x 为数组维度
//y 为数组元素个数
void fun2(char *b,int x,int y)
{
        int i;
        for (i=0;i<x;i++)
                 printf("str[%d]=%s\r\n",i,(b+y*i));
                 
        printf("str[1][3]=%c\r\n",*(b+y*1+3));
        
}

int main()
{
        int i;
        char str[3][10];
        sprintf(str[0],"123456");
        sprintf(str[1],"654a210"); 
        sprintf(str[2],"asdfghjkl");
        char *b=str[0];        
        printf("fun2(b,3,10);\r\n");        
        fun2(b,3,10);        
        
        char str2[5][20];
        sprintf(str2[0],"1234561000");
        sprintf(str2[1],"654d21045678"); 
        sprintf(str2[2],"zxcvbnmqwertrt");
        sprintf(str2[3],"zxcvbnmqwertrt");
        sprintf(str2[4],"zxcvbnmqwertrt");
        
        char *c=str2[0];        
        printf("fun2(c,5,20);\r\n");                
        fun2(c,5,20);        
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值