美文网首页程序员
C指针(6):数组

C指针(6):数组

作者: miamendax | 来源:发表于2020-05-27 17:12 被阅读0次

    数组

    1.数组和指针的差别

    int vector [5] = {1,2,3,4,5};
    int * pv = vector;
    

    差别:

    1. vector[i]表示法生成的机器码从位置vector开始,移动i个位置,取出内容; 而*(vector+i)表示法生成的机器码则是从vector开始,在地址上增加i,然后取出这个地址中的内容
    2. 对vector调用sizeof操作符会返回20,就是这个数组分配的字节数; 对pv调用sizeof操作符会返回4,就是指针的长度
    3. pv是一个左值,左值表示赋值操作符左边的符号。左值必须能修改。像vector这样的数组名字不是左值,它不能被修改

    2.动态分配数组

    • 分配可能不连续的内存

      int rows = 2;
      int columns = 5;
      
      int **matrix = (int **) malloc(rows * sizeof(int *));
      
      for (int i = 0; i < rows; i++) {
          matrix[i] = (int *) malloc(columns * sizeof(int));
      }
      
    • 分配连续内存

      //先分配外层数组,再分配各行内存
      int rows = 2;
      int columns = 5;
      
      int **matrix = (int **) malloc(rows * sizeof(int *));
      matrix[0] = (int *) malloc(rows * columns * sizeof(int));
      
      for (int i = 1; i < rows; i++)    
          matrix[i] = matrix[0] + i * columns;
      
      //一次性分配,无法使用索引,比较少使用
      int *matrix = (int *)malloc(rows * columns * sizeof(int));
      

    3.不规则数组

    //一种声明方法
    int (*(arr2[])) = { 
        (int[]) {0, 1, 2, 3},
        (int[]) {4, 5}, 
        (int[]) {6, 7, 8}
    };
    

    相关文章

      网友评论

        本文标题:C指针(6):数组

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