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

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

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

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

运行结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Swift 运算符
  • spring boot 项目 prometheus 自定义指标收集区分应用环境集群实例ip,使用 grafana 查询--方法耗时分位数指标
  • HarmonyOS 开发范式、应用模型
  • Electron 项目实战 02:打包和自动更新
  • 有temp表包含A,B两列,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数
  • 数据库课程设计mysql---图书管理系统详细的设计文档和需求文档
  • TCP如何关闭连接(详细版)
  • 如何进行 AWS 云监控
  • Meta关闭Spark AR平台:未来规划与影响分析
  • 内存分配算法
  • SpringBoot实现前后端传输加密设计
  • Elasticsearch 基本语法使用
  • 排除挖矿木马
  • Node.js 异步编程深度解析:回调函数、Promise 以及 async/await
  • Vue3 使用 富文本编辑器 wangeditor/editor-for-vue 配置详解
  • Django 博客开发教程 16 - 统计文章阅读量
  • export和import的用法总结
  • extract-text-webpack-plugin用法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Laravel 菜鸟晋级之路
  • Linux各目录及每个目录的详细介绍
  • Python实现BT种子转化为磁力链接【实战】
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • sessionStorage和localStorage
  • Vue实战(四)登录/注册页的实现
  • 大数据与云计算学习:数据分析(二)
  • 关于字符编码你应该知道的事情
  • 前言-如何学习区块链
  • 入手阿里云新服务器的部署NODE
  • 少走弯路,给Java 1~5 年程序员的建议
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 再次简单明了总结flex布局,一看就懂...
  • 栈实现走出迷宫(C++)
  • ​业务双活的数据切换思路设计(下)
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #define、const、typedef的差别
  • #FPGA(基础知识)
  • $().each和$.each的区别
  • (06)Hive——正则表达式
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (ZT)薛涌:谈贫说富
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (四)鸿鹄云架构一服务注册中心
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ***利用Ms05002溢出找“肉鸡
  • .NET 5种线程安全集合
  • .net core Redis 使用有序集合实现延迟队列