A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CesC 中级黑马   /  2015-7-21 22:49  /  689 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    数组(array)是若干同类变量的聚合,允许通过统一的名字引用其中的变量。其特定元素通过下标(index)访问。C语言的数组由连续的内存区构成,最低地址对应首元素,最高地址对应末元素。
保存数组所需要的内存量直接与基类型和数组大小有关。对一维数组而言,以字节为单位的总内存量可以这样来确定:
       总字节数 sizeof (基类型)×数组长度
例如,一维数组x
int x[100];

它所占内存字节数目为sizeof(int)×100=4×100=400个字节数。它在内存中排列如下:
元素 x[0]      x[1]       x[2]   ...    x[98]      x[99]     
地址 0x004000  0x004004   0x004008...   0x004260   0x004264   0x004268

       可见,一维数组就是在连续内存中按下标顺序存储的同类信息组成的表。
       在C语言中,框住下标的方括号([])实际上被看成一个运算符,与圆括号(())具有相同的优先级。下表归纳了一些运算符的优先级(从上到下递减):
      
      
   
() []
从左到右
最高
++  --  !(type)
从右到左
单目运算符
* / %
从左到右
乘除运算符
+  -
从左到右
加减运算符
<  <=  >  >=
从左到右
关系运算符
==  !=
从左到右
相等测试运算符
&&
从左到右
逻辑与
||
从左到右
逻辑或
? :
从右到左
条件运算符
=  +=  -=  *=  /+  %=
从右到左
赋值运算符
,
从左到右
逗号运算符
       C语言中最常用的数组是串(string),它是以空(null)字符结束的一位字符数组。

数组声明和初始化
一维数组的定义形式:
    type var_name[size];
       这里,type定义了数组的基类型(base-type),即数组中各元素的类型。size定义了数组的元素数目。C89规定,必须用常数指定数组的大小。如:
    double balance[100];
       数组通过下标引用数组名来访问它的元素。如:
       balance[13] = 12.34; /* balance3号元素赋值 */
       注意,C语言的数组的首元素的下标是0
       示例:加载由0~99组成的一个整型数组。
1   #include <stdio.h>
2
3   int main(void)
4   {
5       int x[100];   /* 定义一个100元素的整型数组 */
6       int t;
7
8       /* 初始数组x,其值从0到99 */
9       for ( t=0; t<100; ++t ) x[t] = t;
10
11      /* 显示x,100行 */
12     printf( "Index\tValue\n", x[t] );
13      for( t=0; t<100; ++t ) printf( "%d\t%d\n", t, x[t] );
14
15      return 0;
16  }
数组在声明时,其各个元素的值是随机的,可以在数组声明时初始化它,如例子中的第五行
5       int x[100];
可以这样来写以初始化:
5       int x[100] = { 0 };
这表示数组x的首个元素被初始化为0,由于初始化值的个数比数组元素个数少,因此其余的99个元素都被自动初始化为0。也可以这样为数组初始化:
        int y[5] = { 33, 2, 0, 6, 54 };
这样就为一个五个元素的整型数组初始化全部值。但下面的做法是错误(语法错误):
int y[5] = { 33, 2, 0, 6, 54, 45 };
由于声明为数组只有五个元素,因此初始化的值也只能小于等于五。
       有时,如果声明数组的同时初始化它,可以省略声明的数组的大小,其元素个数由初始化值的列表数目确定:
              int y[] = { 33, 2, 0, 6, 54 };
这是一个具有五个元素的数组。
注意C语言不检查数组的边界,因此程序可以在数组的两边越界。如上例第九行可以这样写,尽管这导致溢出:
for ( t=0; t<=100; ++t ) x[t] = t;
这时, x[100] = 100; 已经越界,这可以通过编译,运行时也不一定会发生错误。程序员必须在必要时加入边界检查。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马