C语言学习--一维数组(1)

1.数组的定义:

        数组就是具有一定顺序关系的若干变量的集合。其中的每个变量,都被称为数组的元素。从定义中,我们可以看出几个关键点:

        首先,组成数组的元素是若干个独立的变量。

        其次,这些变量的数据类型必须相同。

        最后,变量之间有一定的顺序关系。

        数组属于构造数据类型。一个数组可以分解为多个数组元素。这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可以分为数值数组、字符数组、指针数组、结构数组等。

        C语言中使用数组必须先定义。一维数组是指只有一个下标的数组,说明形式为:

                                        <存储类型>  <数据类型>  <数组名>[常量表达式]                                       

        存储类型指的是:auto,register,static,extern。默认为auto。

        数据类型可以是任一种基本数据类型或构造数据类型。

        数组名是用户自定义的数组标识符。

        方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

        对于数组的定义,这里有几点是需要特别注意的:

        (1)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

        (2)数组名应当符合标识符的命名规则,即由字母、数字和下划线组成,但不能以数字开头。

        (3)数组名不能与其他变量名相同。例如,以下书写是错误的:

int main()
{
    int a;
    float a[10];

    return 0;
}

        (4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素,它需要在数组定义时就确定下来,不能随时随着程序的运行动态更改。它的下标从0开始计算,因此5个元素分别为:a[0]、a[1]、a[2]、a[3]、a[4]。

        (5)不能在方括号中用变量来表示数组元素的个数,但是可以是符号常数或常量表达式,如:a[3+2]、b[9-6]。

        (6)允许在同一类型说明中说明多个数组和多个变量。

2.一维数组的引用

        C语言中规定了数组必须逐个元素引用,而不能整体引用。举例如下:

int a[10];

printf("%d\n",a);

        上面的用法是错误的,数组的引用实际上就是数组元素的引用。数组元素的 一般表示方法为

数组名[下标]

        其中的下标只能为整型常量或整型表达式。举个例子来演示数组的使用,计算Fibonacci数列前十项并逆序给出结果:

#include <stdio.h>

int main()
{
    /*数组定义,有十个元素*/
    int a[10],i;

    a[0] = a[1] = 1;
    for(i = 2; i<10; i++){
        /*下标为整型表达式,注意标号范围0-9*/
        a[i] = a[i-2] + a[i-1];
    }

    printf("Fibonacci bumbers...\n");
    for(i = 9; i >= 0; i--){
         /*下标为整型表达式,注意标号范围0-9*/        
        printf("a[%d] is %d\n",i,a[i]);
    }

    return 0;
}

         其运行结果如下所示:

Fibonacci numbers...
a[9] is 55
a[8] is 34
a[7] is 21
a[6] is 13
a[5] is 8
a[4] is 5
a[3] is 3
a[2] is 2
a[1] is 1
a[0] is 1

        通过下标就可以很方便地访问数组中的元素,但是,一定要注意下标从0开始,范围为0~n-1

其中,n为元素个数。假如,引用数组元素时,下标越界了,结果将是不可预估的。数组的越界操作相当于内存访问越界,这种错误所造成的结果是无法估计的,因此在引用数组元素时,一定要仔细处理下标,以防出现数组越界问题。

3.一维数组的初始化

        数组的初始化有七种情况。

(1)局部数组不初始化

        对于普通局部数据,若定义时没有初始化,则数组中的元素值是不确定的。

(2)static 数组不初始化

        对于static修饰的数组,若定义时没有初始化,则数组中的元素值默认为0。

(3)全局数组不初始化

        对于全局数组,若定义时没有初始化,则数组中的元素值默认为0。

(4)全部初始化

        与变量在定义时初始化一样,数组也可以在定义时进行初始化,如对整型数组进行初始化。

int a[10] = {1,2,3,4,5,6,7,8,9,10};

        此处还要注意,数组只能通过下标逐个引用元素。定义数组时,对元素的初始化,只能写成一行,不能换行写,下边的写法是错误的:

int a[10];
a[10] = {1,2,3,4,5,6,7,8,9,10};

(5)部分初始化

        数组在定义时,可以对其中的部分数据进行初始化。当“{}”中的值个数少于元素个数时,只给前面的部分元素赋值。例如,下面的定义就是对数组的前5个数据初始化,而后5个数据自动赋0。

int a[10] = {1,2,3,4,5};

(6)数组全部赋值

        若想对数组中的全部元素赋值,则可以省略数组下标中的常量。编译器会自动根据初始化列表自动计算数组元素的个数,如下所示:

int a[] = {1,2,3,4,5,6,7,8};

(7)数组全部初始化为0

        有一种很特殊的写法,可以一次性把数组中的元素全部初始化为0,只需要把这种写法当作特殊情况来记忆。示例代码如下:

int main()
{
    int a[0] = {0};

    return 0;
}

         也可以引用库函数memset,把数组用0来填充,需要引入头文件string.h

#include <string>

int main()
{
    int a[10];

    memset(a, 0, sizeof(a));

    return 0;     
}

4.一维数组的内存分配

        在内存中,数组元素占用连续的存储空间,并且根据单个元素所占存储空间来进行内存分配。数组名代表数组的起始地址,是地址常量,对数组名求sizeof,可以得出数组占用的总空间,类似的道理,很容易利用下面的表达式来计算数组的元素个数:

数组的元素个数 = sizeof(数组名) /  sizeof(数据类型)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱永不消散

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

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

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

打赏作者

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

抵扣说明:

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

余额充值