• 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

  • 相关阅读:
    Emgucv使用中常用函数总结
    设置 omitempty 标签忽略空值字段
    Goland 中定义实时模板
    gorm Update
    Gorm 日期格式错误
    Gorm 多张表的自动迁移
    Sql取出各科分数前三名的学生,Sql各科成绩前三的学生
    美团Leaf分布式ID Leaf安装和使用,美团Leaf snowflake雪花算法模式,美团Leaf segment号段模式
    RocketMQ可靠消息最终一致性解决方案
    Windows安装RocketMQ,RocketMQ Windows安装和使用
  • 原文地址:https://www.cnblogs.com/born2run/p/9581329.html
Copyright © 2020-2023  润新知