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);
    }
    
  • 相关阅读:
    C++内存检测函数_CrtSetBreakAlloc()
    Detours 的配置
    浅析杀毒软件开发原理
    Sqlite3初学
    java拦截器、过滤器的区别
    sudo 设置无需密码
    Visual Studio 2012/2010/2008 远程调试
    jquery 随笔
    网页中显示xml,直接显示xml格式的文件
    centos7.2_x64安装mysql.tar.gz
  • 原文地址:https://www.cnblogs.com/ijpq/p/15428302.html
Copyright © 2011-2022 走看看