C-数组

作者: 小石头呢 | 来源:发表于2019-08-02 10:18 被阅读0次

    数组可以存储一个固定大小的相同类型元素的集合;所有数组都是由连续的内存位置组成;最低的地址对应第一个元素;最高的地址对应最后一个元素。

    一.声明数组

    type arrayName [ arraySize ];
    

    声明一个数组,需要指定元素的类型和元素的数量

    二.初始化数组

    可以逐个初始化数组,也可以使用一个初始化语句

    三.初始化,定义例子

    //初始化里面确定数组大小
    int num[4] = {};
    
    //在定义时明确指定数组的大小
    int num[4] = {1,2,3,4};
    
    //在定义时明确指定大小,并且初始化部分数据
    //剩余的数据一般初始化为对应的数据类型的默认值
    int num[4] = {1,2};
    

    四.访问方式

    • 数组单元个数可以使用 sizeof(数组名)/sizeof(数组内元素数据类型)

    • 下标访问,num[i]

    • 指针访问,*(num+i*4)或者*(num+4)(编译器会自动处理)

    • 数组的数组名表示的是:数组的首地址

    • (num+i*4)表示访问num内第i个元素在内存里面的起始地址

    • *(num+i*4)访问第i个元素的值

    五.多维数组

    声明:type name[size1][size2]...[sizeN];

    二维数组

    多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:

    type arrayName [ x ][ y ];
    

    一个二维数组可以被认为是一个带有 x 行和 y >列的表格。下面是一个二维数组,包含 3 行和 4 列:


    int x[3][4]

    初始化二维数组

    多维数组可以通过在括号内为每行指定值来进行初始化

    int a[3][4] = {  
       {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
       {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
       {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
    };
    

    内部嵌套的括号是可选的,下面的初始化与上面是等同的:

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

    六.传递数组给函数

    对形参的改变会影响到实参,因为传递的是数组的首地址

    三种方式声明一维数组形式参数:

    • 形式参数是一个指针
    void myFunction(int *param){
    
    }
    
    • 形式参数是一个已定义大小的数组
    void myFunction(int param[10]){
    
    }
    
    • 形式参数是一个未定义大小的数组
    void myFunction(int param[]){
       //就函数而言,数组的长度是无关紧要的
       //因为 C 不会对形式参数执行边界检查
    }
    

    七.从函数返回数组

    • C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

    • 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数.

    • C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

    • 实际例子:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    //计算机并不能产生真正的随机数
    //而是已经编写好的一些无规则排列的数字存储在电脑里
    //把这些数字划分为若干相等的N份
    //并为每份加上一个编号用srand()函数获取这个编号
    //然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候
    //rand()获得的数也是固定的,所以一般srand的参数用time(NULL)
    //因为系统的时间一直在变
    //所以rand()获得的数也就一直在变,相当于是随机数了。
     
    /* 要生成和返回随机数的函数 */
    int * getRandom( ){
      static int  r[10];
      int i;
     
      /* 设置种子 */
      srand( (unsigned)time( NULL ) );
      for ( i = 0; i < 10; ++i)
      {
         r[i] = rand();
         printf( "r[%d] = %d\n", i, r[i]);
     
      }
     
      return r;
    }
     
    /* 要调用上面定义函数的主函数 */
    int main (){
       /* 一个指向整数的指针 */
       int *p;
       int i;
     
       p = getRandom();
       for ( i = 0; i < 10; i++ )
       {
           printf( "*(p + %d) : %d\n", i, *(p + i));
       }
     
       return 0;
    }
    

    相关文章

      网友评论

          本文标题:C-数组

          本文链接:https://www.haomeiwen.com/subject/olfcdctx.html