二维数组简介与使用方法_二维数组怎么写

二维数组简介与使用方法_二维数组怎么写前言本文将探讨一下关于二维数组在内存中的存储和二维数组在参数传递时的使用。一、二维数组在内存中的存储如果定义一个这样的二维数组inta[3][4]={{1,3,5,7},{9,11,13,15},{

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

本文将探讨一下关于二维数组在内存中的存储和二维数组在参数传递时的使用。

一、二维数组在内存中的存储

如果定义一个这样的二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};则其在内存中的表示可能下面这样的。

二维数组简介与使用方法_二维数组怎么写

由上图可以看出,在内存中二维数组是按照行主序进行存储的,从内存的角度上看,二维数组本质就是一个一维数组。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组。而二维数组的名字代表二维数组第0行的首地址(注意它是代表一行元素的首地址,而不是第0行第0列元素的首地址,虽然是相等的,但不能这么理解,所以在没有强制转换的情况下,二维数据要么通过行指针进行参数传递,要么通过二维指针进行参数传递)

二、二维数组在参数传递时的使用

1、 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

     void Func(int array[3][10]);

     void Func(int array[][10]);

     但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:

      如 void Func(int array[3][]);

 因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(行主序),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行,多少列,不能只指定一维而不指定第二维。

2、将二维数组作为指针进行参数传递

(1)直接作为行指针(数组指针)来传递参数(二维数组的名字代表二维数组第0行的首地址

 1 #include "stdafx.h"
 2 #include<iostream>
 3 using namespace std;
 4 
 5 void test(int (*a)[4],int m,int n)
 6 {
 7     cout<<*(*(a+m)+n);
 8 }
 9 
10 int _tmain(int argc, _TCHAR* argv[])
11 {
12     int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
13     test(a,1,1);
14     return 0;
15 }

上述程序中int (*a)[4],可以理解为二维数组的行指针(这个指针指向二维数组的行,而每一行最多有4列),a[n]表示二维数组的第n行,所以cout<<*(*(a+m)+n);先定位出a数组的第m行的位置,然后再求出第m行第n列的值

(2)参数传递时将二维数组的强制转换为一维指针,然后按照内存中存储的方法计算二维数组对应成一维数组的下标

 1 #include "stdafx.h"
 2 #include<iostream>
 3 using namespace std;
 4 void test(int *a,int row,int column,int m,int n)
 5 {
 6     cout<<a[m*column+n];
 7 }
 8 
 9 int _tmain(int argc, _TCHAR* argv[])
10 {
11     int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
12     test((int*)a,3,4,1,1);
13     return 0;
14 }

注意参数传递时将二维数组的强制转换为一维指针,如上述程序中的第12行

 

注意:切不可将二维数组直接转换成二维指针作为形参传递,因为在这样子函数中不知道每一个一维元素含有多少个二维元素。

如,下面这样写就是错误的:

#include<iostream>
using namespace std;
void test(int **a,int m,int n)
{
    cout<<*(*(a+m)+n);
} 
int main()
{
     int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};

     test((int **)a,1,1);
     return 0;
 }

二维数组简介与使用方法_二维数组怎么写

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168058.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • poetry和poet_poetry和the poetry区别

    poetry和poet_poetry和the poetry区别Poetry的基本使用准备工作如果你是在一个已有的项目里使用Poetry,你只需要执行poetryinit命令来创建一个pyproject.toml文件:poetryinit可看到

    2022年7月31日
    10
  • Oracle 11g安装步骤(超详细)

    Oracle 11g安装步骤(超详细)今天电脑装了win10,需要重新装oracle,这边记录一下重装过程,避免下次浪费时间。1、oracle下载官方下地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可。路径名称中,最好不要出现中文,也不…

    2022年7月25日
    11
  • 解决pycharm中使用pip安装numpy失败的问题「建议收藏」

    解决pycharm中使用pip安装numpy失败的问题「建议收藏」今天使用pycharm编译python程序时,由于要调用numpy包,但又未曾安装numpy,于是就根据pycharm的提示进行安装,最后竟然提示出错!!!如下图:这不是要让我回归命令行的生活吗?!解决方案如下:1、下载numpy-1.19.5-cp39-cp39-win_amd64.whl,网址是https://pypi.org/project/numpy/#files2、将下载好的numpy文件放在python安装路径下的/scripts中3、在命令行状态下切换到script

    2022年8月29日
    8
  • leetcode题目分类_最长前缀匹配例题

    leetcode题目分类_最长前缀匹配例题原题链接编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,”flow”,”flight”]输出:”fl”示例 2:输入:strs = [“dog”,”racecar”,”car”]输出:””解释:输入不存在公共前缀。 提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成题解分

    2022年8月8日
    11
  • SpringBoot常用注解集合「建议收藏」

    SpringBoot常用注解集合「建议收藏」前言这里我们不会将springboot全部的注解都一个一个分析一遍,因为现在普遍都是前后端分离开发,所以之前用在很多的模板视图解析上的注解现在已经不怎么用到了这里就没再提。有需要的同学可以去看我的其他关于框架的专栏。Part.1:SpringMVC工作原理因为springboot其实就是spring和SpringMVC的合体版本,所以分析它的注解其实就是分析spring和SpringMVC的注解,所以我们可以先看一下SpringMVC的工作原理(具体的解析可以看我的关于SpringMVC框架的专栏),

    2022年8月20日
    6
  • 双机热备 ip地址_防火墙双机热备技术「建议收藏」

    点击上方蓝字关注我吧!双机热备技术双机热备技术产生的原因:传统的组网中,内部用户和外部用户的交互全部通过唯一的一台防火墙,当该防火墙出现故障时,内部网络中所有的主机与外部网络之间的通讯将中断,通讯可靠性无法保证。双机热备技术的出现改变了可靠性难以保证的尴尬状态,通过在网络出口部署两台或多台网关设备,保证了内部网络于外部网络之间的通讯畅通。为了避免传统组网中所形起的单点故障的发生,通常情况…

    2022年4月9日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号