6.3 二维数组的声明和引用

声明:数据类型 标识符[常量表达式1][常量表达式2];int a[3][4];

表示a为整型二维数组,其中第一维有3个下标(0~2),第二维有4个下标(0~3),数组元素12个,可以用来存放3行4列的整型数据表格。可以理解为:

a[0]——a 00 a01 a02 a03

a[1]——a10 a11 a12 a13
a[2]——a20 a21 a22 a23存储顺序是按行存储a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23

引用的时候下标不可越界,例如b[1][5]=a[2][3]/2,不可以写成a[3][4],否则发生错误。

二维数组的初始化

将所有数据写在一个{}内,按顺序赋值,例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

分行给二维数组赋初值,例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

可以对部分元素赋初值,例如:static int a[3][4]={{1},{0,6},{0,0,11}};

数组作为函数参数

数组元素作为实参,与单个变量一样。

数组名作为参数,形实参数都应是数组名,类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。

#include <iostream>

using namespace std;

void RowSum(int A[][4], int nrow)    //计算二维数组A每行元素的值的和,nrow是行数

{        for (int i = 0; i < nrow; i++)

         {

                   for(int j = 1; j < 4; j++)

                         A[i][0] += A[i][j];

         }

}

int main()   //主函数

{

         int Table[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};     //声明并初始化数组

         for (int i = 0; i < 3; i++)       //输出数组元素

         {

                   for (int j = 0; j < 4; j++)

                         cout << Table[i][j] << "   ";

                   cout << endl;

         }

         RowSum(Table,3);        //调用子函数,计算各行和

         for (i = 0; i < 3; i++)   //输出计算结果

         {

               cout << "Sum of row " << i << " is " <<Table[i][0]<< endl;

         }

}

  

运行结果:

1   2   3   4

2   3   4   5

3   4   5   6

Sum of row 0 is 10

Sum of row 1 is 14

Sum of row 2 is 18

10 14 18

6.3 对象数组

声明:类名 数组名[元素个数];

访问方法:通过下标访问  数组名[下标].成员名

初始化:数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。

通过初始化列表赋值:point A[2]={point(1,2),point(3,4)};

如果没有为数组显示指定初始值,数组元素使用默认值初始化(调用默认构造函数)

//Point.h

#if !defined(_POINT_H)

#define _POINT_H

class Point

{   public:

       Point();

       Point(int xx,int yy);

       ~Point();

       void Move(int x,int y);

       int GetX() {return X;}

       int GetY() {return Y;}

  private:

       int  X,Y;

};

#endif

//Point.cpp

#include<iostream>

using namespace std;

#include "Point.h"

Point::Point()

{   X=Y=0;

     cout<<"Default Constructor called."<<endl;

}

Point::Point(int xx,int yy)

{   X=xx;

     Y=yy;

     cout<< "Constructor called."<<endl;

}

Point ::~Point()

{  cout<<"Destructor called."<<endl;  }

void Point ::Move(int x,int y)

{      X=x;    Y=y;  }

#include<iostream>

#include "Point.h"

using namespace std;

int main()

{   cout<<"Entering main..."<<endl;

   Point A[2];

   for(int i=0;i<2;i++)

     A[i].Move(i+10,i+20);

   cout<<"Exiting main..."<<endl;

   return 0;

}
 

C++——二维数组和对象数组的更多相关文章

  1. java 二维数组和对象数组

    1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组 2.二维数组的初始化 1) int intA[][]={{1,2},{2,3},{3,4,5}}; 2) int [][] intB=n ...

  2. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  3. Java基础系列 - 数组、二维数组、对象数组

    package com.test2; public class demo2 { public static void main(String[] args) { /** * 一维数组使用 */ //数 ...

  4. Java 学习笔记 二维数组和对象数组

    定义二维数组 int[][] a = new int[4][5]; 可以不指定列数 int[][] a = new int[4][]; 获取行 int i = a.length(); 如果使用第一个例 ...

  5. poj3067 二维偏序树状数组

    题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring ...

  6. hdu1081 DP类最大子段和(二维压缩+前缀和数组/树状数组计数)

    题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j) ...

  7. 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus

    Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...

  8. $[SHOI2007]$ 园丁的烦恼 二维数点/树状数组

    \(Sol\) 设一个矩阵的左上角为\((x_1,y_1)\),右下角为\((x_2,y_2)\),\(s_{x,y}\)是到\((1,1)\)二维前缀和,那么这个矩阵的答案显然是\(s_{x_2,y ...

  9. 087、Java数组之对象数组的静态初始化

    01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...

随机推荐

  1. 转换:使用vue-axios和vue-resource解决vue中调用网易云接口跨域的问题

    本人配置成功https://segmentfault.com/a/1190000011072725

  2. c++ 浮点数小数位

    . double f = 3.123456789; . cout<<f<<endl; // 输出3.12346 (包含整数和小数,且四舍五入) . cout<<se ...

  3. wordpress<=4.6版本任意命令执行漏洞

    漏洞简述 当WordPress 使用 PHPMailer 组件向用户发送邮件.攻击者在找回密码时会使用PHPmailer发送重置密码的邮件,利用substr(字符串截取函数).$run(系统调用函数) ...

  4. 在线编辑器(WangEditor)

    自己之前写了一篇关于POI 相关的博客, 想了想在公司中一般常用的不就是上传下载,poi,分页,定时等.好像还有个在线编辑器, 于是自己就花了两个多小时把编辑器相关的代码撸了遍,当然了是先百度找了找资 ...

  5. selenium规避网站监测

    规避网站监测 ​ 现在不少大网站有对selenium采取了监测机制.比如正常情况下我们用浏览器访问淘宝等网站的window.navigator.webdriver的值为undefined.而使用sel ...

  6. LeetCode 112. 路径总和 (递归遍历二叉树)

    题目链接:https://leetcode-cn.com/problems/path-sum/ 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 ...

  7. 双 leave 栈迁移的坑

    目录 简介 问题 解决办法 简介   之前在复现自己做出来的题时,一样的思路发现拿不了 shell 了,后来发现是栈迁移的坑. 问题   假设 32 位系统中,漏洞函数可以任意写入 0x0000000 ...

  8. Python论做游戏外挂,Python输过谁?

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...

  9. 在阿里云IIS服务器上安装证书

    在IIS服务器上安装证书 您可将下载的阿里云SSL证书安装到IIS服务器上,使您的IIS服务器支持HTTPS安全访问. 一.前提条件 申请证书时需要选择 系统自动创建CSR. 申请证书时如果选择手动创 ...

  10. 【剑指Offer】47、求1+2+3+...+n

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 题解:递归实现/利用Math //利用短路 ...