zoukankan      html  css  js  c++  java
  • All implementations of two-dimensional array parameter passing

    IN C

    gcc 5.4.1 c99
    gdb 7.11.1

    0X01

    array bound are fully determined at compile time.

    #include <stdio.h>
    
    #define R 3 
    #define C 4
    
    void func(int arr[R][C]) {
        for (int i=0; i <R;++i){
            for (int j =0; j<C;++j){
                arr[i][j] = i+j;
                printf("%d,", arr[i][j]);
            }
        }
        
    }
    
    int main()
    {
        int arr[R][C] = {0};
        func(arr);
    
        return 0;
    }
    

    0x02

    this is the first choice for dealing with 2darray. operating pointer to element of array and malloc with free should be considered.

    #include <stdio.h>
    #include <stdlib.h>
    
    void func(int* array, int rows, int cols)
    {
      int i, j;
    
      for (i=0; i<rows; i++)
      {
        for (j=0; j<cols; j++)
        {
          array[i*cols+j]=i+j;
          printf("%d,", array[i*cols+j]);
        }
      }
    }
    
    int main()
    {
      int rows = 3, cols = 4;
      // or you can call scanf assigning value to rows and cols.
      int *x;
    
      /* obtain values for rows & cols */
    
      /* allocate the array */
      x = malloc(rows * cols * sizeof(*x));
    
      /* use the array */
      func(x, rows, cols);
    
      /* deallocate the array */
      free(x);
    }
    

    0x03

    there are other methods that impl 2darray, such as only denote the second dim of array A[][N]. but those methods are less practical.

    in addition, impl this methods by declaring pointer to pointer is a bit of complicated.

    pointer to pointer code example as follow:

    void func(int** array, int rows, int cols)
    {
      int i, j;
    
      for (i=0; i<rows; i++)
      {
        for (j=0; j<cols; j++)
        {
          array[i][j] = i*j;
        }
      }
    }
    
    int main()
    {
      int rows, cols, i;
      int **x;
    
      /* obtain values for rows & cols */
    
      /* allocate the array */
      x = malloc(rows * sizeof *x);
      for (i=0; i<rows; i++)
      {
        x[i] = malloc(cols * sizeof *x[i]);
      }
    
      /* use the array */
      func(x, rows, cols);
    
      /* deallocate the array */
      for (i=0; i<rows; i++)
      {
        free(x[i]);
      }
      free(x);
    }
    
  • 相关阅读:
    P2464 [SDOI2008]郁闷的小J
    P2157 [SDOI2009]学校食堂
    P3201 [HNOI2009]梦幻布丁
    P2051 [AHOI2009]中国象棋
    UVA11987 Almost Union-Find
    P2577 [ZJOI2005]午餐
    洛谷 3768简单的数学题(莫比乌斯反演+杜教筛)
    LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)
    BZOJ 4555:[TJOI2016&HEOI2016]求和(第二类斯特林数+NTT)
    BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/ijpq/p/15428302.html
Copyright © 2011-2022 走看看