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

server/2024/11/13 9:16:50/

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

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.ppmy.cn/server/113215.html

相关文章

7-8月月报 | Apache SeaTunnel社区进展一览

各位热爱 Apache SeaTunnel 的小伙伴们&#xff0c;社区 7-8 月份月报来啦&#xff01;这两个月项目有了哪些进展&#xff1f;又有谁登上了我们社区的贡献者榜单呢&#xff1f;快来一睹为快吧。 Merge Stars 感谢以下小伙伴上两个月为 Apache SeaTunnel 项目和社区发展所做的…

AWS EC2安全组配置:轻松开放端口访问

在AWS EC2实例上开放特定端口是配置服务器安全性和可访问性的重要步骤。本文中九河云将介绍如何通过AWS控制台配置EC2安全组来实现端口开放。 1. 登录AWS控制台 首先,登录到AWS管理控制台,并导航到EC2服务页面。 2. 找到目标EC2实例 在EC2控制面板中,找到需要开放端口的实例…

江协科技stm32————11-3 软件读写W25Q64

目录 MySPI.c W24Q64.c W25Q64_Ins.h main.c MySPI.c 包含通信引脚封装、初始化以及SPI通信的3个拼图&#xff08;起始、终止和交换一个字节&#xff09; #include "stm32f10x.h" // Device headervoid MySPI_W_SS(uint8_t BitValue) //ss cs…

Ollama—87.4k star 的开源大模型服务框架!!

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Ollama 是一个开源的大语言模型&#xff08;LLM&#xff09;服务工具…

爬取图片保存为pdf

本文章想借着爬虫给大家介绍一下图片转pdf,有需要的友友们可以看看参考参考&#xff0c;有帮助到友友的可以收藏&#xff0b;关注。下面以爬取初中7年级数学上册为例给大家演示一下。网址是这个 https://mp.weixin.qq.com/s?__bizMzAxOTE4NjI1Mw&mid2650214000&idx…

前端学习笔记-Web APls篇-04

Dom节点&移动端滑动 1.日期对象 日期对象:用来表示时间的对象作用:可以得到当前系统时间 1.1实例化 在代码中发现了 new 关键字时&#xff0c;一般将这个操作称为实例化 创建一个时间对象并获取时间 获得当前时间 获得指定时间 1.2时间对象方法 使用场景&#xff1a…

Leetcode面试经典150题-207.课程表

这个题是图的问题&#xff0c;因为图的拓扑排序在实际应用中有非常多的用途图&#xff0c;所以最近考的越来越多 解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {static class Course {/**可成的入度&#xff0c;就是它依赖的课程数 */int in;/**课程的编号 …

学习大数据DAY51 Docker 的介绍与使用

目录 01 Docker 介绍 在安装部署程序服务过程种存在的问题 docker 容器技术和 vmware 的比较 什么是虚拟化技术 docker 的本质 docker 容器技术的发展 docker 容器技术的优势 02 docker 组件 docker 核心组件 docker 扩展组件 03 docker 的使用 docker 安装 Docker…