数组(一)

数组(一)

1、学习目标

  • 掌握一维数组的使用
  • 总结与思考

2、数组概述

  • 数组是构造数据类型之一
  • 数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。
  • 数组中各元素的数据类型要求相同,用数组名和下标确定。数组可以是一维的,也可以是多维的。

3、一维数组的定义

  • 所谓一维数组是指只有一个下标的数组。它在计算机的内存中是连续存储的。

  • C语言中,一维数组的说明一般形式如下:

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

  • 例子:

    #include <stdio.h>
    
    int main()
    {
        int a[6], i;
    
        for(i = 0; i < 6; i++)
            printf("%p\n",&a[i]);//打印数据的地址,所以需要加&
    		
      	puts("");
        printf("%p\n",a);
        printf("%d\n",sizeof(a));
    
        return 0;
    }
    

    运行结果:int型数组中每个元素占4个字节

    /array$ ./app
    0x7ffd73f1c370
    0x7ffd73f1c374
    0x7ffd73f1c378
    0x7ffd73f1c37c
    0x7ffd73f1c380
    0x7ffd73f1c384
     
    0x7ffd73f1c370
    24
    
  • 数组名表示内存首地址,是地址常量;sizeof(数组名)是数组占用的总内存空间。

    编译时分配连续内存,内存字节数=数组维数*sizeof(元素数据类型)
    请添加图片描述

  • 注意事项(一维):

    • C语言对数组不作越界检查,使用时要注意数组长度

      int a[5];a[5] = 10

    • 关于用变量定义数组维数

      int i = 15; int a[i]

  • 例:i = 6, a[i]

    #include <stdio.h>
    
    int main()
    {
        int i = 6, a[i];
    
        for(i = 0; i < 6; i++)
            printf("%p\n",&a[i]);
    
        puts("");
        printf("%p\n",a);
        printf("%d\n",sizeof(a));
    
        return 0;
    }
    
    

    运行结果:

    /array$ ./app
    0x7ffd8b8d0640
    0x7ffd8b8d0644
    0x7ffd8b8d0648
    0x7ffd8b8d064c
    0x7ffd8b8d0650
    0x7ffd8b8d0654
    
    0x7ffd8b8d0640
    24
    
  • 一维数组的引用

    • 数组必须先定义,后使用

    • 只能逐个引用数组元素,不能一次引用整个数组

    • 数组元素表示形式:数组名[下标],下标可以是常量或整型表达式。

      • 如:int a[10];

        ​ printf(“%d”,a);错误写法

      • int a[10];

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

        ​ printf(“%d\t”, a[j]);正确的写法

  • 一维数组的初始化

    • 初始化方式:在定义数组时,为数组元素赋初值

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

    • 说明

      • 数组不初始化,其元素值为随机数
      • 对static数组元素不赋初值,系统会自动赋以0值
      • 只给部分数组元素赋初值
    • 示例

      • static int a[5]

        等价于:a[0]=0; a[1]=0;a[2]=0;a[3]=0;a[4]=0

      • int a[5]={2,3,4}

        等价于:a[0]=2;a[1]=3;a[2]=4;a[3]=0;a[4]=0

      • int a[3]={2,3,4,6,5} 错误

      • int a[]={1,2,3,4,5};编译系统根据初值个数确定数组维数

    • 实例编程

      • 只给部分元素赋值

        #include <stdio.h>
        
        int main()
        {
        //  int i = 6, a[i];
            int a[6] = {1, 4, 7}, i;
        
            for(i = 0; i < 6; i++)
                printf("%p , %d\n", &a[i], a[i]);
        
            puts("");
            printf("%p %d\n", a, a[0]);
            printf("%d\n",sizeof(a));
        
            return 0;
        }
        

        运行结果:

        array$ ./app
        0x7ffddd119260 , 1
        0x7ffddd119264 , 4
        0x7ffddd119268 , 7
        0x7ffddd11926c , 0
        0x7ffddd119270 , 0
        0x7ffddd119274 , 0//剩余部分自动补0
        
        0x7ffddd119260 1
        24
        
      • 根据初值个数确定数组包含的数据个数

        #include <stdio.h>
        
        int main()
        {
            int b[] = {3,2,4,5,7,1}, i, n;
        
            n = sizeof(b) / sizeof(int);//数组的总空间/一个字符的空间=数组包含的个数
            for(i = 0; i < 6; i++)
                printf("%p , %d\n", &b[i], b[i]);
        
            puts("");
            printf("%p %d\n", b, b[0]);
            printf("%d\n",sizeof(b));
            printf("%d\n", n);
        
            return 0;
        }
        
        

        运行结果:

        array$ ./app
        0x7ffd26c2e8e0 , 3
        0x7ffd26c2e8e4 , 2
        0x7ffd26c2e8e8 , 4
        0x7ffd26c2e8ec , 5
        0x7ffd26c2e8f0 , 7
        0x7ffd26c2e8f4 , 1
        
        0x7ffd26c2e8e0 3
        24
        6
        
      • 冒泡排序:重复的走访要排序的数列

        #include <stdio.h>
        
        int main()
        {
            int a[] = {1, 4, 7, 11, 30, 8, 10, 20};
            int i, j, n, t;
        
            n = sizeof(a) / sizeof(int);
        
            for(i = 0; i < n-1; i++){
              //j+1<=n-1-i,j<=n-2-i,j<n-1-i
                for(j = 0; j < n-1-i; j++){
                    if(a[j] > a[j+1]){
                        t = a[j];
                        a[j] = a[j+1];
                        a[j+1] = t;
                    }
                }
            }
        
            for(i = 0; i < n; i++)
                printf("%d ", a[i]);
            puts("");
        //  putchar('\n');
            return 0;
        }
        

        运行结果:

        array$ ./app
        1 4 7 8 10 11 20 30 
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值