zoukankan      html  css  js  c++  java
  • C语言矩阵传递给函数的方法

    C语言矩阵传递给函数的方法

    先看一道题:

    A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element.

    Now given an M x N matrix, return True if and only if the matrix is Toeplitz.

    Example 1:

    Input:
    matrix = [
      [1,2,3,4],
      [5,1,2,3],
      [9,5,1,2]
    ]
    Output: True
    Explanation:
    In the above grid, the diagonals are:
    "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]".
    In each diagonal all elements are the same, so the answer is True.

    Example 2:

    Input:
    matrix = [
      [1,2],
      [2,2]
    ]
    Output: False
    Explanation:
    The diagonal "[1, 2]" has different elements.

    Note:

    1. matrix will be a 2D array of integers.
    2. matrix will have a number of rows and columns in range [1, 20].
    3. matrix[i][j] will be integers in range [0, 99].
    bool isToeplitzMatrix(int** matrix, int matrixRowSize, int *matrixColSizes) {
        for (int i = 0; i < matrixRowSize - 1; ++i)
        {
            for (int j = 0; j < *matrixColSizes - 1; ++j)
            {
    //          if (matrix[i][j] != matrix[i + 1][j + 1])
    //          if(*((int*)matrix+i**matrixColSizes+j)!=*((int*)matrix+(i+1)**matrixColSizes+j+1)) /*不通过*/
                if(*(*(matrix+i)+j)!=*(*(matrix+(i+1))+j+1))
                {
                    return false;
                }
            }
        }
    
        return true;
    }

    这是一个能够通过的答案,由于C语言中矩阵一般是线性排列的,所以一开始用*((int*)matrix+i**matrixColSizes+j)表示matrix[i][j],但是总是不通过。查看答案,发现直接用matrix[i][j]居然直接通过,所以leetcode后台可能不是把矩阵线性排列的,于是试着用*(*(matrix+i)+j)表示matrix[i][j],居然成功了。根据这个,matrix应该是指向一个指针数组,数组里的每个元素又指向每一行元素组成的数组。

    一般地,我们在传递一个矩阵给函数时,根据原数组的存储方式一般有两种传递方式。

    第一种是矩阵是线性存储的,即矩阵就是一块m×n的连续内存地址,此时一般函数地形参设为int (*matrix)[matrixColSizes](matrixColSizes),是一个常数)这表示matrix指向一个数组,该数组每个元素是一个含有matrixColSizes个int类型元素的数组,此时matrix[i][j]解释为*((int*)matrix+i*matrixColSizes+j)

    第二种是矩阵不是线性存储的,即矩阵是一个指针数组,数组中的每一个元素是一个指针,改指针指向一个由矩阵一列元素组成的数组,此时matrix[i][j]解释为*(*(matrix+i)+j

  • 相关阅读:
    汉文博士——支持生僻古难字检索的开放式免费汉语词典
    delphi 实现接口 Unsatisfied forward or external declaration
    注册服务程序
    递归的使用
    NTLDR is missing 错误处理方法
    测试
    常见数据类型的存储结构
    多维分析
    showmodule
    pos函数
  • 原文地址:https://www.cnblogs.com/born2run/p/9581329.html
Copyright © 2011-2022 走看看