• 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);
    }
    
  • 相关阅读:
    Canvas简单验证码识别
    原生JS操作class 极致版
    JS实现——体彩足球预测分析
    JS实现——俄罗斯方块
    JS实现——用3L和5L量出4L的水
    pygame躲敌人的游戏
    ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题
    ubuntu14.04 pygame安装 python2.7
    各类书籍汇总
    python调用java jython
  • 原文地址:https://www.cnblogs.com/ijpq/p/15428302.html
Copyright © 2020-2023  润新知