C语言:二维数组及所占用的字节

以数组作为数组的元素“数组中的数组”即二维数组。

语法如下:

类型 数组标识[一维数组长度][二维数组长度] 如:float rain[5][12]

二维数组占用的字节数计算方法为:二维数组单个元素所占的字节 * 元素个数。上面声明的rain[5][12],共5*12=60个元素,float类型占用4个字节,因此为 4*60=240个字节。

下面的代码片段有两个实例,一个计算5年的总降水量、5年中月平均降水量:

#include <stdio.h>
/*
时间:2022-04-10 19:55
作者:sgbl888
功能:学习二维数组(计算5年总降水量、每月平均降水量)
*/
#define YEARS 5 //5年
#define MONTHS 12 //每年12个月
//定义一个二维数组(数据一共5行表示5年,每行12列表示12个月)
const float rain[5][12] = {
    {4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
    {8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3},
    {9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4},
    {7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2},
    {7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2}
};

int main(){
    int year, month;
    float subtot, total;
    //计算
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
〖程序设计基础〗练习题1一、选择题(每题1分,共30分)下列各题A)、B)、C)、D)四个选项,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。1.以下的选项能正确表示Java语言的一个整型常量的是( )。A) 12. B) -20 C) 1,000 D) 4 5 62.以下选项,合法的赋值语句是( )。A) a = = 1; B) ++ i; C) a=a + 1= 5; D) y = int ( i );3.若所用变量都已正确定义,以下选项,非法的表达式是( )。A) a != 4||b==1 B) 'a' % 3 C) 'a' = 1/2 D) 'A' + 324.若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( )。A) 0 B) 4 C) 8 D) -45.设有定义语句int a[]={66,88,99}; 则以下对此语句的叙述错误的是( )。A) 定义了一个名为a的一维数组 B) a数组有3个元素C) a数组的下标为1~3 D)数组的每个元素是整型6.若a和b均是整型变量并已正确赋值,正确的switch语句是( )。A) switch(a+b); B) switch( a+b*3.0 ){ ...... } { ...... }C) switch a D) switch ( a%b ){ ...... } { ...... }7.下列语句序列执行后,x 的值是( )。int a=3, b=4, x=5;if( ++aA) 5 B) 3 C) 4 D) 68.下列语句序列执行后,k 的值是( )。int i=6, j=8, k=10, n=5, m=7;if( iA) 9 B) 10 C) 11 D) 129.下列语句序列执行后,r 的值是( )。char ch='8'; int r=10;switch( ch+1 ){ case '7': r=r+3;case '8': r=r+5;case '9': r=r+6; break;default: ;}A) 13 B) 15 C) 16 D) 1010.下列语句序列执行后,j 的值是( )。int j=0;for( int i=3; i>0; i-- ) j+=i;A) 3 B) 4 C) 5 D) 611.下列语句序列执行后,j 的值是( )。int j=9, i=6;while( i-- >3 ) --j;A) 5 B) 6 C) 7 D) 812.下列语句序列执行后,i的值是( )。int i=10;do { i-=2; } while( i>6 );A) 10 B) 8 C) 6 D) 413.为了区分重载多态同名的不同方法,要求( )。A) 采用不同的形式参数列表 B) 返回值类型不同 C) 调用时用类名或对象名做前缀 D) 参数名不同14.定义主类的类头时可以使用的访问控制符是( )。A) private B) protected C) public D) private protected15.下列整型的最终属性 i 的定义,正确的是( )。A) static final int i=100; B) final i;C) static int i; D) final float i=1.2f; 16.设 x,y 均为已定义的类名,下列声明对象x1的语句正确的是( )。A) public x x1= new y( ); B) x x1=x( ); C) x x1=new x( ); D) int x x1;17.下列方法定义,正确的是( )。A) int x( int a,b ) B) double x( int a,int b){ return (a-b); } { int w; w=a-b; }C) double x( a,b ) D) int x( int a,int b){ return b; } { return a-b; }18.能构成多分支的语句是( )。A) for 语句 B) while 语句 C) switch 语句 D) do -
### 回答1: 在C语言,一维数组和二维数组的数组名字与数组内存地址有着密切的关系。 对于一维数组来说,数组名字就是该数组的首元素的内存地址。例如,如果有一个int类型的一维数组a,那么a的数组名字就是&a[],即a[]的内存地址。 对于二维数组来说,数组名字也是该数组的首元素的内存地址。但是,由于二维数组是由多个一维数组组成的,因此数组名字实际上是指向第一个一维数组的指针。例如,如果有一个int类型的二维数组b,那么b的数组名字就是&b[][],即第一个一维数组的首元素的内存地址。 需要注意的是,对于二维数组来说,数组名字和数组名字+1所指向的内存地址之间的差值并不是1,而是一个一维数组的大小。这是因为在内存二维数组是按照行优先的顺序存储的,即相邻的两个元素在内存的地址差值等于一行元素的大小。 综上所述,一维数组和二维数组的数组名字与数组内存地址之间的关系是非常密切的,理解这种关系对于编写高效的C程序非常重要。 ### 回答2: 一维数组在C语言是连续存储的一组相同类型的数据元素。数组名实际上是指向数组首元素的指针。由于数组是连续存储的,数组名与数组内存地址是一致的。 例如,声明一个一维数组arr,如果arr的内存起始地址为0x1000,且每个元素占用4个字节,则数组元素arr[0]的地址为0x1000,arr[1]的地址为0x1004,arr[2]的地址为0x1008,依此类推。因此,arr指向数组首元素arr[0],arr的内存地址即为数组的起始地址0x1000。 二维数组可以看作是一维数组的数组。在内存,一维数组与二维数组都是按照行优先的方式依次存储。对于一个二维数组,数组名指向第一行的首元素,而第一行又是一个一维数组。因此,二维数组的数组名与第一个一维数组的首元素地址相同。 例如,声明一个二维数组matrix,如果矩阵的内存起始地址为0x2000,且每个元素占用4个字节,则matrix[0][0]的地址为0x2000,matrix[0][1]的地址为0x2004,matrix[1][0]的地址为0x2008,依此类推。对于matrix来说,matrix指向第一行的首元素matrix[0][0],matrix的内存地址即为数组的起始地址0x2000。 综上所述,一维数组与二维数组的数组名与数组内存地址的关系是一致的。数组名指向数组首元素的指针,而数组元素在内存是连续存储的,因此数组名与数组内存地址相同。 ### 回答3: 在C语言,数组名字代表的是数组的首元素的内存地址。对于一维数组,数组名字即为该数组的内存地址。例如,对于一个名为arr的一维数组,arr代表的是该数组的首元素的内存地址。 对于二维数组,数组名字也代表了二维数组的首行的内存地址。二维数组在内存以连续的一维数组的形式存储。因此,对于一个名为arr的二维数组,arr[0]代表了二维数组的第一行的内存地址。 数组名字可以通过在变量前加上&符号来取得该数组的内存地址。例如,&arr[0]和arr在结果上是等价的,都代表了该数组的首元素的内存地址。 需要注意的是,即使二维数组在内存是连续存储的,但二维数组名字和一维数组名字并不等价。对于一个名为arr的二维数组,arr代表的是二维数组的首行的内存地址,而&arr则代表了整个二维数组的内存地址。 综上所述,数组名字与数组内存地址的关系是:数组名字代表了数组的首元素(一维数组)或首行(二维数组)的内存地址。可以通过在变量前加上&符号来取得该数组的内存地址。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值