C语言基础——数组

数组的基本概念

     一维数组

       定义变量格式 : 数据类型 变量名称;

       定义数组:     数据类型 数组名[元素个数];
       1、数组只有定义才可以使用
       2、数组只有初始化了才可以被使用
       3、元素个数既可以使用常量也可以使用变量
     
       1、数组元素个数,在C99里规定是不可以使用变量的,LLVM、gcc编译器对数组进行扩展.
 
    //数组定义
    int cScores[3];
    //数组的初始化
    cScores[0] = 70;
    cScores[1] = 75;
    cScores[2] = 80;
    //  数组的多种初始化方式
    #include <stdio.h>

int main(int argc, const char * argv[]){
//先定义变量再进行初始化
    int num;
    num = 10;
    int num1 = 10;
    
    //  1、先定义数组在进行初始化
    int nums[3];
    nums[0] = 1;
    nums[1] = 2;
    nums[2] = 3;
    //2、定义数组的同时进行初始化
    //第一种格式
    int nums1[3] = {1,2,3};
    //第二种格式:后面的有几个元素那么数据的元素个数就是几
    int nums2[] = {1,2,3,4,5};
    int length = sizeof(nums2) / sizeof(int);
    // printf("%d\n",length);
    //第三种格式:按下标顺序依次赋值,没有显式赋值的默认赋值为0
    int nums3[20] = {1,3};
    length = sizeof(nums3) / sizeof(int);
    //    for (int i = 0; i < length; i++) {
    //        printf("%d\n",nums3[i]);
    //    }
    //第四种格式:指定元素初始化
    int nums4[10] = {[3] = 5,[6] = 10,[1] = 2 };
    length = sizeof(nums4) / sizeof(int);
    for (int i = 0; i < length; i++) {
        printf("nums4[%d] = %d\n",i,nums4[i]);
    }
    //定义的同时进行初始化,没有显式初始化的会被初始化为0
        //注意点 1、数组只有定义的时候才可以进行整体的初始化
        //    2、如果使用变量作用元素个数不可以定义的同时进行初始化
    return 0;
}

数组的存储细节

#include <stdio.h>
int main(int argc, const char * argv[]){
    char name[5] = {'a','p','p','l','e'};
    1、数组一块连续存储区域
    2、数组名是数组所占存储空间字节地址最小那个字节的地址
    3、下标就是相对于数组名称偏移量
    4、数组下标是从0开始
    
    char feel[5] = {'h','a','p','p','y'};
    //变量是从大字节开始分配,那么先定义的变量地址比后定义变量地址要大
//    printf("%p\n",name);
//    printf("%p\n",feel);
//    int length = sizeof(name);
//    for (int i = 0; i < length; i++) {
//        printf("name[%d] = %p \n",i,&name[i]);
//    }
    
    1、数组下标越界(错误的),非常危险
    feel[5] = 'z';
    printf("%c\n",name[0]);
    //数组下标越界害处
//        1、约会约错了对象(导致程序逻辑错误)
//        2、导致程序崩溃
//    printf("%c",name[-2]);
    return 0;
}

函数与数组

基本数据类型作为参数传递是值传递
数组作为函数参数传递是地址传递

数组作为函数参数传递的时候,转换为指针

二维数组

 二维数组基本概念

      二维数组的多种初始化方式
      数据类型 数组名称[元素个数]
      数据类型 数组名称[一维数组个数][一维数组的元素个数];
     只要是数组就是一块连续的存储区域
     注意点:二维数组如果没有初始化里面存放都是垃圾值
    //1、先定义再进行初始化
    int nums[2][3];
    nums[0][0] = 2;
    nums[0][1] = 3;
    //2、定义的同时进行初始化
//  只要是定义的同时进行初始化,那么所有没有显式初始化的值都会被初始化为0
//  1、第一种方式
    int nums1[2][3] = {{1,2,3},{4,5,6}};
//  2、第二种方式:不指定一维数组个数
    int nums2[][3] = {{1,2,3},{4,5,6}};
//  3、第三种方式
//    int nums3[][3] = {1,2,3,4,5,6};
    int nums3[][3] = {1,2,3,4,5};
//  4、第四种
    int nums4[2][3] = {1,2,3,4,5,6};
//  5、部分初始化
//    5.1
    int nums5[3][3] = {1,2};
    int nums6[3][3] = {{1},{2},{3}};
    //计算二维数组中有多少一维数组
//    int len = sizeof(nums6) / sizeof(nums6[0]);
//    printArray(nums6, len);

总结

   数组:用来存放一组相同数据类型的数据的,(容器)
   数组定义格式:数据类型 数组名称[元素个数]
   数组的特点:
        1、只能存放一种数据类型的多个数据
        2、数组是连续的存储空间
        3、数组的每一个元素都有下标的,并且下标是从0开始的
        4、数组名就是一个地址,是这个数组所在存储空间最小那个字节编号
        
   数组的多种定义方式:
        1、先定义在进行初始化
           1.1使用常量作为元素个数
              int nums[10];
           1.2变量作为元素个数
              int count = 10;
              int nums[count];
           注意点:
            1、没有初始的数组元素里面都是垃圾值
            2、不可以整体赋值
               num = {1,2,3} 错误
               num[10] = {1,2,3} 错误
        2、定义的同时进行初始化
           1、第一种方式,指定元素个数的同时对所有元素进行初始化
           int nums[3] = {1,2,4};
           2、第二种方式,不指定元素个数,给数组进行初始化
           int nums[] = {1,2,3};
           3、第三种方式 指定元素个数,对数组进行部分初始化
          int nums[10] = {1,2};
            4、第四种方式 指定元素个数,对指定元素进行初始化
            int nums[10] = {[1] = 3,[4]=5}
          特点:
              1、所有没有显式初始化的元素会被自动初始化为0
          注意点:
             变量作为元素个数不可以使用这种方式
    数组与函数
       1、 数组作为函数参数传递是地址传递
       2、 数组作为函数参数,数组自动被转换为指针类型

    二维数组:元素是一维数组的数组
    格式:    数据类型 数组名称[一维数组的个数][一维数组的元素个数]
    int nums[2][3] = {{1,2,3},{4,5,6}};
    二维数组的遍历
        1、外层循环控制第一个角标
        2、内层循环控制第二个角标


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值