关于C数组的总结

一维数组的创建和初始化

例如创建一个长度为10的整型数组int a[10]; int为数组的类型,10为数组的长度,注意:数组[ ]括号内的内容必须为常量,不能为变量。

数组的初始化是指给所创建的数组赋初值,例如

int  arr[10]={1,2,3,4};  长度为10,除去所赋的值后面其余六个数为0

intarr1[]={1,2,3};  长度为3

intarr2[3]={1,2,3};   长度为3

chararr4[3]={'a','b','c'};   长度为3

chararr5[]={'a','98','c'};长度为3

chararr6[]="abcdef";长度为7最后一个字符为\0

通常使用for循环给数组赋我们所需要的值

for(i =0; i <10; i++)

{

         scanf("%d",&a[i]);

}

 

一维数组的使用   一维数组通过下标来访问进而使用  下标从0开始

for(i =0; i <10; i++)

{

printf("%d", a[i]);

}

数组的大小可以通过计算得到

inta[10];

intsize=sizeof(a)/sizeof(a[0]);

 

一维数组在内存中的存储

int 整型为四个字节,所以由此可见一维数组在内存中是连续存储的,由低地址向高地址

一维数组的指针访问

首先我们看看这个

 

我们会发现数组名a的地址和a[0]的地址是一样的,那么是否说明数组名的地址就是数组的首元素的地址

 

我们取出数组名的值

取出的值是和首元素的值一样,所以我们可以断定数组名的地址就是首元素的地址

 

因此通过数组名我们可以访问到整个数组

由此可见*a+i)等价于a[i]

 

由以上可得我们可以通过数组名加整数的方式访问整个数组,因此我们可以通过指针访问数组

 

 

 

二维数组的创建和初始化

int a [ 2 ][ 3 ]; 两行三列的数组

二维数组的初始化

inta1[2][3]={{1,2,3},{2,3,4}};

         chara2[4][5]={{2,3},{4,5}};

         double a3 [][ 4 ] = { { 2 , 3 } };   行可以省略但列数不能少

二位数组的使用,与一维数组相同也是通过下标访问数组



二维数组在内存中的存储

同样二维数组在内存中也是连续存储的

二维数组的指针访问

此时我们依然可以通过指针访问数组,但是要注意在二维数组中数组名不再是首元素的地址。所以我们要把指针指向第一个元素的地址。

 

关于二维数组名地址的问题

我们可以把二维数组想象成元素是一维数组的一维数组,所以二维数组数组名的地址就是第一个一维数组元素的地址,也就是二维数组中第一行的地址。

 

在一维数组中数组名指首元素的地址,但当以下两种情况代表整个数组的地址

1.      &数组名  &a

2.      Sizeof(数组名)   括号内只有数组名一个内容时

 

二维数组除了数组名是代表第一行的地址,其余&数组名,sizeof(数组名)都指的是整个数组的地址

 

数组的地址与数组首元素的地址大小是一样的但代表的含义却不同

 

猜你喜欢

转载自blog.csdn.net/m_jianjianjiao/article/details/79937659