二维数组的定义和初始化-程序员宅基地

技术标签: c++  c语言学习  

前一篇,我们介绍了一维数组的一般定义格式为:
类型 数组名[ 元素个数 ];
一维数组使用一个下标确定个元素在数组中的顺序,可用排列成一行的元素来表示。如果要定义一个二维数组,只要增加一维下标即可,二维数组的一般定义格式为:
类型 数组名[ 第一维长度 ][ 第二维长度 ];
二维数组用两个下标确定个元素在数组中的顺序,可用排列成i行j列的元素表示。第一维的长度代表数组每一列的元素个数,第二维的长度代表数组每一行的元素个数。
例如:short matrix[3][4];
声明的是一个具有3行4列共12个短整形元素的二维数组。
第一维(行)的下标值从0变化到2,第二维(列)的下标值从0变化到3,因此,第一个元素的下标matrix[0][0],最后一个元素为matrix[2][3]。

一维数组在内存中占用的字节数为:数组长度×sizeof(基类型),
二维数组占用的字节数为:第一维长度×第二维长度×sizeof(基类型)。

由于短整型占2个字节,数组matrix有12个短整型元素,因此在内容中占24个字
节的连续存储空间。注意,在不同的编译系统中,int型所占的字节数是不同的。
因此,用sizeof运算符来计算一个类型或者变量在内存中所占的字节数更“靠
谱”,并且也有利于提高程序的可移植性(Portability)。

n维数组用n个下标来确定个元素在数组中的顺序。

由于C语言中不带下标的数组名具有特殊的含义,他代表数组的首地址,因此不能整体引用一个数组,每次只能引用指定下标值得数组元素。

对于二维数组,既可以按元素初始化,也可以按行初始化。
下面两句是等价的:
short matrix[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
short matrix[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12}};

当初始化列表给出数组全部元素的初始值时,第一维的长度声明可以省略,此时,系统将按初始化列表中提供的初值个数来定义数组的大小。
下面两句时等价的:
short matrix[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
short matrix[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

按行初始化时,即使初始化列表中提供的初值个数可以少于数组元素的个数,第一维的长度声明也可以省略,此时系统自动给后面的元素初始化为0.
下面两句是等价的:
short matrix[ ][4]={ {1,2,3},{4,5},{6}};
short matrix[3][4]={ {1,2,3,0},{4,5,0,0},{6,0,0,0}};

注意,数组第二维的长度声明永远不能省略。这是因为C语言中的二维数组元素在c编译程序为其分配的连续
存储空间中是按行存放的,即存在完整第一行后存第二行,然后再第三行,以此类推。存放时系统必须知道
每一行有多少个元素才能正确计算出该元素相对于二维数组第一个元素的偏移量,这样就必须已知数组第二
维的长度。

例题:从键盘输入某年某月(包括闰年),编程输出该年的该月拥有多少天。

#include <stdio.h>

#define Mouths 12

int days[2][Mouths]={
    {
    31,28,31,30,31,30,31,31,30,31,30,31},
					{
    31,29,31,30,31,30,31,31,30,31,30,31}};

int main(void)
{
    
	int year,mouth;
	do
	{
    
		printf("Input year, mouth:");
		scanf("%d,%d",&year,&mouth);
	}while(mouth<1||mouth>12);
	if(((year%4==0)&&(year%100!=0))||(year%400==0))
		printf("The number of days is %d\n",days[1][mouth-1]);
	else printf("The number of days is %d\n",days[0][mouth-1]);
	return 0;
 } 

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ww1425408527/article/details/130464995

智能推荐

c++变长数组实现学生成绩最大最小平均值统计_可变长模板求平均值-程序员宅基地

文章浏览阅读550次。友元函数标准输入输出重载,变长数组主要是尝新体验了一把vector,各种碰壁,尤其越界问题。时间长没写代码好多细节问题。假期多练习吧。具体细节都在注释里整体思路就是设计学生类包含姓名和成绩。输入和输出用重载。计算部分用普通函数。储存用vector,用指针传递。代码简单,注意细节即可。#include<iostream>#include <string>#include<vector>using namespace std;class Student_可变长模板求平均值

@DateTimeFormat和@JsonFormat使用详解及注意事项_java 实体类 @jsonformat-程序员宅基地

文章浏览阅读434次。DateTimeFormat适用于get请求方式且参数传递方式为路径请求参数的方式和forn表单的方式。而@JsonFormat适用于post方式的参数传递。@DateTimeFormat的pattern不会实际影响转化后的Date的实际格式。而@JsonFormat会。@DateTimeFormat要求传递的参数格式必须和接收指定的格式一致。_java 实体类 @jsonformat

Android多线程:IntentService用法&源码分析_开启子线程的服务:intentservice-程序员宅基地

文章浏览阅读200次。前言多线程的应用在Android开发中是非常常见的,常用方法主要有:继承Thread类实现Runnable接口AsyncTaskHandlerHandlerThreadIntentService今天,我将全面解析多线程其中一种常见用法:IntentService目录1. 定义IntentService是Android里_开启子线程的服务:intentservice

电子海图开发第十五篇 墨卡托海图投影(共一百篇)_电子海图 二次开发 核心问题-程序员宅基地

文章浏览阅读2.2k次。一、墨卡托投影墨卡托投影,又称正轴等角圆柱投影,由荷兰地图学家墨卡托(G.Mercator)于1569年创拟。假设地球被套在一个圆柱中,赤道与圆柱相切,然后在地球中心放一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,就形成以一幅墨卡托投影的世界地图(如下图)。因其等角特性,广泛应用与航空、航海中。墨卡托投影,是正轴等角圆柱投影,圆柱投影的一种,为地图投影方法中影响最大的投影。假设地球被围在一中空的圆柱里,其基准纬线(赤道)与圆柱相切,然后再假想地球中心有一盏灯,把球面上的图形投影到..._电子海图 二次开发 核心问题

Junit - 断言方法(Assert Methods)_junit断言-程序员宅基地

文章浏览阅读6.8k次,点赞7次,收藏33次。Junit 4 断言方法允许检查测试方法的期望结果值和真实返回值。Junit的org.junit.Assert类提供了各种断言方法来写junit测试。这些方法被用来检查方法的真实结果值和期望值。下列一些有用的断言方法列表:Junit 4 Assert Methods Method Description assertNull(java.lang.Object object) ..._junit断言

面向服务架构(SOA)带给我们什么?_soa架构对于客户的意义-程序员宅基地

文章浏览阅读987次。什么是SOA? 面向服务架构SOA(Service-Oriented Architecture)是一种架构模型和一套设计方法学,其目的是最大限度地重用应用程序中立型的服务以提高IT适应性和效率。它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。SOA的关键是“服务”的概念,W3C将服务_soa架构对于客户的意义

随便推点

bootstrap gutter 详解_bootstrap gutters-程序员宅基地

文章浏览阅读3k次。1.首先 gutter 是针对的是padding 他是grid 的封装当我们一拿到这样的代码的时候,在row里面,我们一定会存在一些的疑问,那就是这是啥。px-lg-2 这是什么 mx-lg-2这是什么。1.p对应的是padding2.m对应的是marginx和y 分辨对应是左右 上下 不同dom的设置对应它自己,lg 就是视图的大小目前对于5.0中的g*开头的,4.5中是没有的详细的教程请查看https://www.orchome.com/..._bootstrap gutters

VC项目配置基础 VC6.0-VC2005_项目属性-》配置属性-》c/c++-》预处理器-》预处理器定义中添加have_remote-程序员宅基地

文章浏览阅读703次。摘自 范晓特ID:phunxm一.预处理宏1. 通用宏VC6.0 中:Project Setting -> C/C++ -> Preprocessor definitionsVC2005 中:项目属性 -> 配置属性 -> C/C++ -> 预处理器定义 WIN32 :指明是 Window 32 位系统的编译器,一般用作平台识别。_MBCS/_UNICODE_项目属性-》配置属性-》c/c++-》预处理器-》预处理器定义中添加have_remote

HbuilderX安装及应用插件_hbuilder x截图插件-程序员宅基地

文章浏览阅读3.1k次,点赞5次,收藏6次。uni-app开发初步,HBuliderX的安装_hbuilder x截图插件

CDH6官方文档中文系列(3)----Cloudera安装指南(安装CM和CDH)_cloudera devsh_student_erercisemanual-程序员宅基地

文章浏览阅读1.4k次。Cloudera安装指南最近在学习cdh6的官方文档,网上也比较难找到中文的文档。其实官方英文文档的阅读难度其实并不是很高,所以在这里在学习官方文档的过程中,把它翻译成中文,在翻译的过程中加深学习了解,并分享出来和大家一起学习。中文内容是本人的渣渣英文水平结合有道词典,谷歌翻译的结果,文中部分词语可能翻译的并不准确,希望大家多多提出意见,共同进步。cdh6的官方中文文档系列长期更新,最后目标整理成gitbook,同大家交流学习。最后,如果你觉得本文对你有用,希望点个赞给作者一点鼓励哈。与其感_cloudera devsh_student_erercisemanual

字节序有大端和小端之分_字节序有没有可能是大端和小端-程序员宅基地

文章浏览阅读4.1k次。(1)对于位域结构中的变量来说,其长度不能跨越字节,也就是说不能超过8位。当然如果设置空白位(无名变量,仅仅用作占位的)是没有这个限制的。如果一个字节剩下的位长度不够一个位域,那么从下个字节开始,也可有意置某个位域从下个字节开始。例如:struct bits4_5{ //一个从到小的存放顺序结构体 unsigned : 10; //从位15向下跳到位5 unsigned_字节序有没有可能是大端和小端

IAP内购破解原理_ios内购插件时怎样实现中间人攻击的-程序员宅基地

文章浏览阅读7.4k次。今年3月初写过一篇《iO平台游戏安全小议》,到现今已有7个月了。在这段时间内,iOS平台上的安全问题也产生了不小的变化。从作弊方式来说,从以前稍有门槛的手工操作(命令行操作)发展成了傻瓜式的只需要点击按钮的今年3月初写过一篇《iO平台游戏安全小议》,到现今已有7个月了。在这段时间内,iOS平台上的安全问题也产生了不小的变化。从作弊方式来说,从以前稍有门槛的手工操作(命令行操作)发展_ios内购插件时怎样实现中间人攻击的

推荐文章

热门文章

相关标签