二维数组传参问题

C 中 二维数组动态创建和作为函数参数传参问题 一 概述 最近项目中用到二维数组,没想到用的时候出现了问题,找了好一会才发现原因。看来基本功还不扎实,有必要写篇博客好好理解下这二维数组。 二 二维数组的动态创建 当你知道创建的是几行几列数组时,在c++ 中你可以用new 一条语句就能创建成相应的二维数组。 int **p = new int* [5]; 但是在c语言中标准的库只有 malloc free是分配内存的,怎么分配呢?言归正传,... 阅读详情

二维数组传参全解

第一种方法

#include<stdio.h>
int Sort_Two_Array(int buff[][5],int num)//直接传参第一种引用方法------
{                                        //需要在函数中定义一个指针存放--首行元素地址
	int i=0;int j=0;int temp;            //适合连续元素处理,二维转一维处理
//	int *pload=buff[0];  //pload=buff;
    int *pload;
    pload=buff[0];       //pload=buff[1] 则指向第二行的首元素地址
    /*
    pload+1=buff[0]+1;   *(pload+1)=pload[1]=*(buff[0]+1)
    []是取值符,取了所指向地址的值
    pload[i],即取pload指向首地址加偏移i个地址后的值
    */
	for(i=0;i<num*5;i++)
	{
		for(j=0;j<num*5-i-1;j++)
		{
			if(pload[j]>pload[j+1])     //pload指向了buff[0],即存放了buff[0]的地址
			{                           //pload+j就是buff[0]之后的地址
				temp=pload[j];          //就是那一行的后一个数
				pload[j]=pload[j+1];
				pload[j+1]=temp;
			}
		}
	}
}
int Show_Two_Array(int array[][5],int num)//直接传参第二种引用方法---
{                                         //适合单个元素处理
	int i=0,j=0;
	for(i=0;i<3;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("%4d",array[i][j]);
		}
		printf("\n");
	}
}
int Initial_Two_Array(int array[][5],int num)
{
	int i=0,j=0;
	for(i=0;i<3;i++)
	{
		for(j=0;j<5;j++)
		{
			scanf("%d",&array[i][j]);
		}
		printf("\n");
	}
}
int main(void)
{
	int load[3][5];
	Initial_Two_Array(load,3);//初始化数组
	Sort_Two_Array(load,3);//对数组排序
	Show_Two_Array(load,3);//打印数组
	return 0;
}

第二种方法

#include<stdio.h>
int sort_two_array(int *buff[],int num)//用指针数组接收
{
	int i=0;int j=0;int temp;
	int *pload=buff[0];
	for(i=0;i<num*5;i++)
	{
		for(j=0;j<15-i-1;j++)
		{
			if(pload[j]>pload[j+1])
			{
				temp=pload[j];
				pload[j]=pload[j+1];
				pload[j+1]=temp;
			}
		}
	}
}
int initial_two_array(int *array[],int num)//用指针数组接收在main函数中的指针数组首地址
{
	int i=0,j=0;
	for(i=0;i<num;i++)
	{
		for(j=0;j<5;j++)
		{
			scanf("%d",array[i]+j);
		}
		printf("\n");
	}
}
int output_two_array(int *array[],int num)
{
	int i=0,j=0;
	for(i=0;i<num;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("%5d",*(array[i]+j));//array[i]--->buff[i]
		}
		printf("\n");
	}
}
int main(void)
{
	// buff &buff,buff[0],*(buff+0)
	int buff[3][5];
	//int (*pbuff[3])[5]={buff,buff+1,buff+2};
	int *pload[3]={buff[0],buff[1],buff[2]};
	initial_two_array(pload,3);//初始化数组
	sort_two_array(pload,3);//对二维数组排序
	output_two_array(pload,3);//打印数组
	return 0;
}

第三种方法

#include<stdio.h>
int sort_two_array(int(*buff)[][5],int num)
{
	int i=0;int j=0;int temp;
	int *pload= (int*)buff;//限定取值方式为跳转4个byte(整型),pload指向buff首元素地址
	for(i=0;i<num*5;i++)
	{
		for(j=0;j<15-i-1;j++)
		{
			if(pload[j]>pload[j+1])
			{
				temp=pload[j];
				pload[j]=pload[j+1];
				pload[j+1]=temp;
			}
		}
	}
}
int initial_two_array(int (*pbuff)[][5],int num)
{
	int i=0,j=0;
	int (*pload)[5]=(int(*)[])pbuff;
	int *array[]={*(pload+0),*(pload+1),*(pload+2)};
	for(i=0;i<num;i++)
	{
		for(j=0;j<5;j++)
		{
			scanf("%d",array[i]+j);
		}
		printf("\n");
	}
}
int output_two_array(int (*pbuff)[][5],int num)     //接收数组整体,即[]*[5]个地址,
{
	int i=0,j=0;                                     //接收了二维数组整体地址,在处理的时候
	int (*pload)[5]=(int(*)[])pbuff;/*分割*/         //就要将其分割,强制转换为行整体首地址
	/*将pbuff强制转化为有五个元素(列)的数组,即把整行分割出来了,此时pload即指向pbuff第一行首地址*/
	int *array[]={*(pload+0),*(pload+1),*(pload+2)};//*(pload+0)为二维数组第一行首地址
	for(i=0;i<num;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("%5d",*(array[i]+j));
		}
		printf("\n");
	}
}
int main(void)
{
	// buff &buff,buff[0],*(buff+0)
	int buff[3][5];
	//int (*pbuff[3])[5]={buff,buff+1,buff+2};
	//int *pload[5]={buff[0],buff[1],buff[2],buff[3],buff[4]};
	initial_two_array(&buff,3);//初始化数组
	sort_two_array(&buff,3);//对数组排序
	output_two_array(&buff,3);//打印数组
	return 0;
}
/*
对二维数组整体地址的处理有两种方法,第一种:强制转化为int(*)型,限定跳转长度为4个byte
                                    第二种:强制转化为int(*)[]型,分割行首地址
*/
在Docker中集成GPU监控体系 先上效果图 等文档整理出来再更 阅读详情

相关推荐

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 750

java byte 二维数组_Java基础之数组、二维数组

数组的概念:JAVA语言中提供的数组是用来存储类型相同的一组元素,数组分为一维数组和多维数组一维数组声明数组数组的声明和变量的声明是相同的,必须要先声明才能使用,声明之后jvm不会分配内存空间,只有实例化之后才会为数组分配内存空间。数组的声明有两种方式:数据类型[] 变量名;//这是Java声明数组首选的方法数据类型 变量名[];//这是c语言声明数组的方式创建数组:一:1.声明数组2.实例...

weixin_27645199的博客 1558

国产麒麟系统PXE安装-UEFI引导

注意: 适用uefi引导 适用x86_64架构 一键部署脚本扣我 1.上传ISO到PXE服务器,拷贝ISO文件 # mkdir /kylin_iso # mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso /kylin_iso/ 2.配置http,获取安装源 # yum -y install httpd # mkdir /var/www/html/{ks,kylin} # 注意一定是"/kylin_iso/

河静 5056

java byte 二维数组_java基础中的一维数组和二维数组

1.数组:具有相同数据类型的一组数据的集合。一维数组2.创建一维数组a.数组作为对象允许使用new关键字进行内存分配,使用数组之前,必须首先定义数组变量所属类型,即声明数组。声明数组:语法:数组元素类型 数组名字[];数组元素类型[] 数组名字;注释:数组元素类型:决定了数组的数据类型,包括基本数据类型和费基本数据类型。数组名字:为一个合法的标识符,自己去定义[]:指明该变量是一个数组类型变...

weixin_39578197的博客 818

基于转录逆转的药物重定向 GPS 模型

GPS是一个基于分子结构预测基因表达扰动的开源平台,由三个模块组成:RCL(在LINCS扰动数据上训练抗噪MLP)、GPS4Drugs(预测新化合物的基因表达谱并进行逆转评分)、MolSearch(基于MCTS的分子优化)。平台使用Morgan指纹和Gene Ontology注释作为特征输入,将基因表达扰动离散为三分类标签。训练数据来自LINCS Phase I的18,746个化合物和978个landmark基因,支持四细胞系独立训练,可用于药物重定向与化合物筛选。

听雨草堂 83

银行统一监管报送系统

依据《银行业金融机构数据治理指引》,银行业金融机构应当建立适应监管数据报送工作需要的信息系统,实现流程控制的程序化,提高监管数据加工的自动化程度。银行业金融机构应当将监管数据纳入数据治理,建立工作机制和流程,确保监管数据报送工作有效组织开展,监管数据质量持续提升。银行通常要对接报送EAST5.0、1104、CRSS等近40个监管应用,涉及近1000张报表。表13-01是主要的监管报送应用、报送依据、报送规范、监管机构名称。

银行信息系统应用架构详解 4350

byte二维数组表示

byte[][] arr=new byte[3][]; //3代表数组的长度,后面的中括号代表数组的内容

诚的博客 1591

OpenClaw实战系列06:持久记忆与RAG知识库构建——让AI真正“记住”你

本文介绍了OpenClaw AI助理的持久记忆与RAG知识库构建功能。OpenClaw采用"文件即真理"的独特设计,所有记忆都以Markdown文件形式存储,支持直接编辑和Git版本管理。记忆系统分为三层:长期精炼记忆(MEMORY.md)、日常日志(按日期存储)和归档记忆。文章详细说明了环境配置步骤,包括安装必要组件、创建目录结构、设置API密钥,并提供了OpenClaw主配置文件的完整参数说明。该系统实现了跨会话、跨平台的持久化记忆,使AI助理能真正理解用户需求。

PeterPan的博客 1171

数组

数组 数组的要素: 1.数据类型:这个数组存储的元素的类型 2.数组名:用来标识数组的 3.数组的长度:数组能够存储多少个元素数组的 4.索引/下标:从0开始 用来表示每一个元素的位置 5.数组的元素:数组中存储的数据,我们一般称为元素 向数组中存储数据: 数组名[下标] = 元素值; **从数组中拿数据:**根据元素的下标 数组名[下标] 获取数组长度: 数组名.length(属性) 内存分配...

zhadami的博客 169

RK3588 平台部署实战:OpenCV + LibTorch + FFmpeg 环境搭建与深度学习推理全流程解析

现在,你已经掌握了在RK3588上搭建OpenCV+LibTorch+FFmpeg环境的完整流程,也完成了深度学习模型的部署测试。不妨从一个具体的应用场景入手(如检测自家宠物的品种),亲手打造属于你的第一个边缘智能应用——当你看到模型在RK3588上精准输出结果时,你会发现:嵌入式深度学习的门槛,其实并没有想象中那么高。这些依赖是编译OpenCV、FFmpeg的基础,安装过程中若提示权限不足,可在命令前加。若能输出预测的类别索引,则说明环境搭建成功,模型推理流程通畅。文件,实现模型加载、图像预处理与推理。

FJN110的博客 535

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

数组作为函数参数

数组作为函数参数 前面我们学过,变量可以当作参数是吧!这里数组也是可以当做函数的参数滴,啊?什么?你问数组咋当参数?请看下面知识。 数组可以由整个数组当作函数的参数,也可以由数组中的某个元素当作函数的参数: 1、整个数组当作函数参数,即把数组名称传入函数中,例如: 2、数组中的元素当作函数参数,即把数组中的参数传入函数中,例如: 数组作为函数参数时注意以下事项: 1、数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形参既可以指定长度也可以不指定长度。 2、数组元素作为函数实参

m0_63157732的博客 9716

NX二次开发(Python)-UIStyler-选择体和按钮操作

用UG NX的UIStyler块界面编辑器,生成带有“选择体”和“按钮”操作的一个界面,如下图所示:

GimiGimmy 2311

二维数组前面是行还是列_我的C语言笔记:由二维数组传参引发的一些列问题...

前段时间,在做学校的编程题时,遇到了如上图所示的一道题。在按照题目要求写编写函数时,却发现遇到了错误。接下来,为了简化问题,我用一个打印字符串数组的函数来代替题目中的函数,来分析这些问题。一、问题的出现先按照题目的要求编写如下的函数:#include <stdio.h> void printStr(char* str[], int n) { for (int k = 0; k...

weixin_31990755的博客 1812

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C语言二级指针传参和不定长二维数组传参问题解决

函数二级指针传参和二维数组传参问题

weixin_43887209的博客 835

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言二维数组传参问题

一维数组传参 我们知道,在C语言中,当数组作为实参进行传递时,本质上就是指针在做实参(传递地址值)。如下所示 /* 打印数组的元素值 */ void printArr(int* arr,int len){ for (int i = 0; i<len; i++) { //指针arr获取元素的方式可以使arr[i] 也可以使*(arr+i) printf("...

C安君的博客 3682

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

一维数组及二维数组的传参问题

一维数组的传参 方法一:传数组名 编译器会把这里的 array 解析成指向整型元素的指针,也就是数组的首地址,方括号里面的数组编译器会忽略,写不写都可以,最好不写,以免引起误解。 void test(int array[]) {} 方法二:传指针 array是指向数组的指针,数组名是首元素的地址。 但是在 sizeof(数组名) 和 &amp;(数组名) 两组情况下,数组名指整个数组。 void...

lvxin15353715790的博客 1148

再论二维数组传参问题

一直以来都是把二维数组,当成一维数组,传递到函数函数中进行使用,下面一起来看下面的两组代码: 第一组: #include "stdafx.h" #include "iostream" using namespace std; #define REW 2 #define COL 2 void test(int table[REW][COL]) { cout << table[0

孤独的糖三角 1176

二维数组的传参问题!!!

本文转载于yunyun1886358(感谢!!):http://blog.youkuaiyun.com/yunyun1886358/article/details/5659851 今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然是失败了,编译器提示

L未若的博客 807

二维数组的传参问题

#include "iostream" using namespace std; void printout(int **p,int m,int n) { for(int i=0;i<m;++i) { for(int j=0;j<n;++j) { //p是指向int**的,加上i相当于加了i行,然后*(p+i)是int*的,加上j就是当前要访问数的地址 cout<<*(*(

wunghao8的专栏 510

二维数组和二级指针传参问题

二维数组作为实参,二级指针作为形参 part1 报错:说我给二级指针传了一个数组指针去,数组指针(指向数组的指针), part2 给二级指针传一个数组指针就可以解决了。 part3(总结) 把指针数组和数组指针好好区别一下!!! 指向数组的指针:int (*array)[3];含义是一个指向存放3个整型数据的数组的指针 存放指针的数组: char *array[3];含义是一个数组中存放了3个...

realism_的博客 2465

关于二维数组和二级指针的传参问题

碎碎念博客恢复更新啦!

m0_62955663的博客 779

C++ 二维数组如何传参问题

C++ 二维数组传参方式 我们知道,如果 对于一维数组,我们参数声明为 int a[], 或者 int* a 即可。 但是二维数组,应该怎样呢,直接看下面的样例hhh! #include<iostream> using namespace std; // 指定长度 void show_fixed(int a[2][3], int n, int m){ for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout<<a[i

solicucu 596
上一篇: KEIL生成 bin文件的方法
下一篇: 不使用C语言编译器直接编译C代码
追代码的人
博客等级 码龄9年 93粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追代码的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值