C语音基础-数组12

来源:互联网 发布:淘宝部分退款如何受理 编辑:程序博客网 时间:2024/06/14 01:29

1.什么是数组

    数组是相同数据类型的元素按一定顺序排列的集合

   1.数组可以存储多个数据

   2.数组中的元素的类型都是相同的,在数组创建的时候指定。

   3.数组元素个数是一定的,在创建的时候指定。

2.数组的使用

       在创建数组的时候需要确定亮点:元素类型和元素个数。

       基本概念:

        1).元素:数组中的每一个小空间,就叫做数组的元素.

        2).下标/索引:为了区分数组中的每一个元素.C系统就为每1个元素编了1个号码.

                这个号码从0开始,依次的递增.

                这个号码就叫做这个元素的下标.

        3).长度:指的是数组中元素的个数.也就是这个数组做多可以存储多少个数据.

        arr[0] = 50;

     

     数组的初始化

     

        1).最傻的方式.先声明数组,然后再使用下标逐个赋值.

              int arr[3];

             arr[0] = 10;

             arr[1] = 20;

             arr[2] = 30;

      2).在声明数组的同时就初始化数组的元素.

             int arr[3] = {10,20,30};

             将数组的每1个元素的值依次的写在后面的大括弧之中.

             int arr[3] = {10,20,30};

             在编译器编译的时候.是将这个代码换成了上面那种傻代码.

             int arr[3];

             arr[0] = 10;

             arr[1] = 20;

             arr[2] = 30;

    3)在使用第二种方式初始化的时候,可以省略数组的长度

             int arr[] = {10,20,30,2,12,1,21,2,13,12,3,24,3,543,5,4,65,6,56,4,523,3,2,31,3,13,12,342,4,35,12};

    4).第四种初始化方式.只为数组的前面的元素赋值.

              int arr[3] = {10};

             这个时候,数组的第0个元素的值是10其他的元素的值被自动初始化为0.

             所以,如果我们要讲1个数组中的所有的元素初始化为0

     5).第五种初始化方式.指定下标的初始化.

            int arr[3] = {[1] = 10,[2] = 20}; 

            其他的元素的值就自动的初始化为0.


    数组中数据的访问

        如果要取出数组中元素的值.那么就必须要确定到底要取那1.

           通过下标来确定.下标不能越界,因为越界取出的值就是别人的值


     元素赋值注意事项

         1).为元素赋值的时候.赋值的数据的类型要和元素的类型一致.

             当赋值的数据的类型和元素的类型不一致的时候.会做自动类型转换.

        2). 下标不能越界


3.数组元素的本质

        元素的本质,其实就是1个普通类型的变量.所以我们为数组的元素赋值.其实也就是为1个普通类型的变量赋值.

       数组之所以可以存储多个数据是因为数组中有多个元素.

         数据是存储在元素中.而元素就是1个普通变量.

         所以我们元素重复赋值的时候,新值干掉旧值的. 存储数据的是数组的元素,不是数组。

4.数组在内存中的存放方式

 

    int arr[3];

    1). 声明1个数组,

        在内存中从高字节向低字节申请连续的(数组的长度 *1个元素的字节数)个字节的空间.

    2).下标为小的的元素在低字节.

    3).元素的值存储的是数据的二进制的补码.

    4).数组的元素的本质就是1个普通类型的变量.

        1个数组就是由多个普通类型的变量联合而成的.

        1个元素就是1个普通变量.所以没1个元素也有自己的地址.


5 数组的地址.

 

    1).数组的地址是数组中最低字节的地址.

    2).数组的地址是数组中下标为0的元素的地址.

    3).数组的地址是数组中下标为0的元素的低字节的地址.

    4). 重点:

        数组名就代表数组的地址.

        C语言的数组名中存储的是数组的地址.

        所以.我们不能直接打印数组名,这样得不到数组的元素的值,因为数组名中存储的是数组的地址.

        所以我们应该使用 %p来打印数组名.

    数组的地址 ==数组名 ==数组中的低字节的地址 ==数组中下标为0的元素的地址 ==数组中下标为0的元素的低字节的地址


6 数组的长度计算.

 

    1).数组的每一个元素的类型相同.所以数组的每一个元素占用的字节空间一样.

    2).使用sizeof运算符可以计算数组总共占用的字节数.

        sizeof(数组名);就可以得到这个数组占用的总的字节数.

    3).得到数组占用的总的字节数以后,那么就可以用总的字节数除以每1个元素占用的字节数.

        就可以得到数组的长度.

        sizeof(数组名) /1个元素的字节数.就可以得到数组的长度.

    4).不建议将字节数写死.元素占用的字节数建议也是使用sizeof计算出来.因为不  同的系统不同的编译器

        相同的变量可能占用的字节不一样.


        sizeof(arr) / sizeof(元素类型);

 

        sizeof(arr) / sizeof(arr[0]);

7 注意

       地址传递:通过形参数组指针操作数组实际上操作的就是是实参数组.

    1).当数组作为函数的参数的时候. 会丢失数组的长度.

       所以,这个时候还需要1个参数让调用者将传入的数组的长度传进来.

    2).当数组作为函数的参数的时候.

       在函数的内部去修改这个参数数组的元素,

       其实修改的就是实参数组的元素

    3).强调:只有数组作为函数的参数的时候,通过sizeof才算不出来长度.