当前位置: 首页 > 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 配置详解
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【css3】浏览器内核及其兼容性
  • JWT究竟是什么呢?
  • log4j2输出到kafka
  • Mysql优化
  • MySQL主从复制读写分离及奇怪的问题
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SQLServer之索引简介
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue-router 实现分析
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 百度小程序遇到的问题
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 工作手记之html2canvas使用概述
  • 构建工具 - 收藏集 - 掘金
  • 如何用vue打造一个移动端音乐播放器
  • 一个JAVA程序员成长之路分享
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 如何在招聘中考核.NET架构师
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #{}和${}的区别?
  • (20)docke容器
  • (6)STL算法之转换
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (六)软件测试分工
  • (十六)串口UART
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .htaccess 强制https 单独排除某个目录
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 的缓存方案
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET正则基础之——正则委托