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:
matrix
will be a 2D array of integers.matrix
will have a number of rows and columns in range[1, 20]
.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应该是指向一个指针数组,数组里的每个元素又指向每一行元素组成的数组。
一般地,我们在传递一个矩阵给函数时,根据原数组的存储方式一般有两种传递方式。
第一种是矩阵是线性存储的,即矩阵就是一块的连续内存地址,此时一般函数地形参设为int (*matrix)[matrixColSizes]
(matrixColSizes
),是一个常数)这表示matrix指向一个数组,该数组每个元素是一个含有matrixColSizes
个int类型元素的数组,此时matrix[i][j]
解释为*((int*)matrix+i*matrixColSizes+j)
。
第二种是矩阵不是线性存储的,即矩阵是一个指针数组,数组中的每一个元素是一个指针,改指针指向一个由矩阵一列元素组成的数组,此时matrix[i][j]
解释为*(*(matrix+i)+j
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)