六、数组(例3---多维数组)

本文详细介绍了多维数组的初始化方式,并通过实例展示了如何使用多维数组进行数据存储和访问。文章还探讨了数组定义规则及数组访问时的地址运算特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <string.h>

int main()
{
   //多维数组的初始化
   //[行][列] 一个平面
   int array1[3][3]={1,2,3,4,5,6,7,8,9};
   int array2[3][3]={{1,2,3},{4,5},{1}};
   int array3[ ][3]={1,2,3,4,5,6,7,8,9};
   //int arrayT0[3][ ]={1,2,3,4,5,6,7,8,9}; //XXX
   int arrayT1[ ][3][3]={1,2,3,4,5,6,7,8,9}; //多个的平面
   int arrayT2[ ][1][3][3]={1,2,3,4,5,6,7,8,9};
  //结论:数组的定义必须至少指定除第一维以外其它维度的大小
   int x=3,y=6,w=0,i,c;
   int array4[x][y]; memset(array4,0,sizeof(array4));
   
   for(i=0;i<x;i++)for(c=0;c<y;c++)array4[i][c]=w++;
  
   printf("array1:");for(i=0;i<3;i++)for(c=0;c<3;c++)printf("%d",array1[i][c]);printf("\n"); 
   printf("array2:");for(i=0;i<3;i++)for(c=0;c<3;c++)printf("%d",array2[i][c]);printf("\n");
   printf("array3:");for(i=0;i<3;i++)for(c=0;c<3;c++)printf("%d",array3[i][c]);printf("\n");
   printf("array4:");for(i=0;i<3;i++)for(c=0;c<3;c++)printf("%d ",array4[i][c]);printf("\n");

   printf("array size:%d %d address:%p %p : %p %p value:%d %d : %d %d\n"
          ,sizeof(array4),sizeof(array4[1]),array4,array4+1,array4[1],array4[1]+1,*array4[1],*(array4[1]+1),array4[1][0],array4[1][1]);
//array4[1]可看成是array4[1][0]~array4[1][5]元素的数组名(1.代表下一维度数组的首地址,2.代表下一维度数的整体空间占用)
//array4+1:这个表达式是在做地址运算:地址加1实际加了1行的空间占用值
//array4[1]+1:在这里仍然是在做地址运算:地址加1实际加了1列空间占用值
//地址运算不能简单的看成是算术运算。地址运算的单位值具有一个放大值属性。
//具体放大多少字节,看参与运算的对象是什么具体的数据类型,具体的数据类型下是不是有特殊的用法规定。

   for(i=0;i<x*y;i++)printf("%d ",array4[0][i]);printf("\n");
   //这是一种越界访问行为,但是在这里是安全的,因为后边的内存空间已经确实存在。
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值