多维数组的定义、初始化、引用

二维:数组内每个元素都是一维数组。
多维类似……

一、定义

C++允许定义多维数组,其定义形式为:

元素类型 数组名 [常量表达式1][常量表达式2] …[常量表达式n]

int A[3][4]; //定义二维数组
int B[3][4][5]; //定义三维数组
int C[3,4,5,6]; //错误!

 ►多维定义实际上是反复递归一维定义:即一维数组的每一个元素又是一个一维数组,就构成了二维数组。

►本质上,C++的多维数组都是一维数组,这是由内存形式的线性排 列决定的。因此,不能按几何中的概念来理解多维,多维数组不过 是借用“维”的数学说法表示连续内存单元。

 二、初始化

►可以在多维数组定义时对它进行初始化,这里以二维数组来说明, 初始化有两种形式。

(1)初值按多维形式给出:

元素类型 数组名 [常量表达式1] [常量表达式2] ={{初值列表 1},{初值列表2},...};

int A[2][3]={ {1,2,3},{4,5,6}};//初值按二维形式

(2)初值按一维形式给出:

元素类型 数组名 [常量表达式1] [常量表达式2] ={初值列表};

int A[2][3]={ 1,2,3,4,5,6 };//初值按一维形式

►初值列表提供的元素个数不能超过数组长度,但可以小于数组长度。 如果初值个数小于数组长度,则只初始化前面的数组元素;剩余元 素初始化为0。这个规则两种初始化形式都适用,例如:

//只对每行的前若干个元素赋初值
int A[3][4]={{1},{1,2},{1,2,3}};

//一维形式部分元素赋初值 
int A[3][4]={1,2,3,4,5}; 

►在提供了初值列表的前提下,多维数组定义时可以不用指定第1维的数组长度,但其余维的长度必须指定,编译器会根据列出的元素个数自动确定第1维的长度。例如:

int A[][2][3]={1,2,3,4,5,6,7,8,9,10,11,12};
//正确
int B[2][][3]={1,2,3,4,5,6,7,8,9,10,11,12};
//错误,只能省略第1维
int C[2][2][]={1,2,3,4,5,6,7,8,9,10,11,12};
//错误,只能省略第1维

 三、引用

►多维数组元素的引用与一维类似,也只能逐个引用数组元素的值而 不能一次引用整个数组,引用的一般形式为:

数组名 [下标表达式1] [下标表达式2] …[下标表达式n];

int b[3][4], i, j, sum=0; 
b[0][0]=10; 
b[1][2]=b[0][0]+10; 
b[2-1][2*2-1]= 5
int A[3][4]={1,2,3},x;
x = A[0][1]; //x=2 
A[2][2] = 50; //则数组A变为

 如:

给二维数组输入数据,并以行列形式输出。

 #include <iostream> 
 using namespace std; 
 int main() 
 { 
 int A[3][4],i,j; 
 for (i=0;i<3;i++) 
     for (j=0;j<4;j++) cin >> A[i][j]; 
 for (i=0;i<3;i++) { 
     for (j=0;j<4;j++) //内循环输出一行 
         cout<<A[i][j]<<" "; 
     cout<<endl; //每输出一行换行 
 } 
 return 0; 
 }

求矩阵的转置矩阵。

#include <iostream> 
 using namespace std; 
 int main() 
 { 
 int A[2][3]={{1,2,3},{4,5,6}},AT[3][2], i, j; 
 for (i=0; i<2; i++) //求矩阵A的转置 
    for(j=0;j<3;j++) AT[j][i]=A[i][j]; 
       cout<<"A="<<endl; 
 for (i=0; i<2; i++) { //输出矩阵A 
    for(j=0;j<3;j++) cout<<A[i][j]<<" "; 
       cout<<endl; 
 } 
 cout<<"AT="<<endl; 
 for (i=0; i<3; i++) { //输出转置矩阵AT 
    for(j=0;j<2;j++) cout<<AT[i][j]<<" "; 
      cout<<endl; 
 } 
 return 0; 
 }

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木木(。・ω・。)ノ♡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值