当前位置: 首页 > article >正文

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

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

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);        
}

运行结果:


http://www.kler.cn/a/292867.html

相关文章:

  • CSS多列布局:打破传统布局的束缚
  • Nuxt 版本 2 和 版本 3 的区别
  • 时间管理的三个痛点
  • 32位、64位、x86与x64:深入解析计算机架构
  • Linux设置Nginx开机启动
  • ❤React-JSX语法认识和使用
  • 什么是AIGC?什么是AGI?
  • P8687 [蓝桥杯 2019 省 A] 糖果
  • 苹果mac数据恢复概率大吗 mac数据恢复专业软件哪个好用
  • Pyspark DataFrame常用操作函数和示例
  • javascript中数组遍历的所有方法
  • 云计算之云原生(下)
  • 【电机控制】TC275芯片——ADC外设驱动的配置与实现
  • RK3566/RK3568 Android 11 动态禁止/启用APP
  • 深度学习(二)-损失函数+梯度下降
  • SprinBoot+Vue食堂预约点餐微信小程序的设计与实现
  • 数据手册参数识别后手动确认
  • FFmpeg源码:av_rescale_rnd、av_rescale_q_rnd、av_rescale_q、av_add_stable函数分析
  • 手机扬声器音量总是不够大?试试“扬声器助推器”吧
  • 仕考网:公务员笔试和面试哪个难?
  • CSS-transform【下】(3D转换)【看这一篇就够了!!!】
  • 记录|as string和ToString()的区别
  • 编程式路由跳转
  • opencv轮廓近似,模板匹配
  • 10款好用的电脑监控软件推荐丨2024年干货整理,赶紧码住!
  • 睿赛德科技携手先楫共创RISC-V生态|RT-Thread EtherCAT主从站方案大放异彩