C語言矩陣傳遞給函式的方法

2022-09-12 17:42:22 字數 1989 閱讀 4696

先看一道題:

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

now given anm x nmatrix, returntrueif 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]".

ineach 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:

matrixwill be a 2d array of integers.

matrixwill h**e 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) }}

return

true;

}

這是乙個能夠通過的答案,由於c語言中矩陣一般是線性排列的,所以一開始用*((int*)matrix+i**matrixcolsizes+j)表示matrix[i][j],但是總是不通過。檢視答案,發現直接用matrix[i][j]居然直接通過,所以leetcode後台可能不是把矩陣線性排列的,於是試著用*(*(matrix+i)+j)表示matrix[i][j],居然成功了。根據這個,matrix應該是指向乙個指標陣列,陣列裡的每個元素又指向每一行元素組成的陣列。

一般地,我們在傳遞乙個矩陣給函式時,根據原陣列的儲存方式一般有兩種傳遞方式。

第一種是矩陣是線性儲存的,即矩陣就是一塊m×

n' role="presentation">m×n

m×n的連續記憶體位址,此時一般函式地形參設為int (*matrix)[matrixcolsizes](matrixcolsizes),是乙個常數)這表示matrix指向乙個陣列,該陣列每個元素是乙個含有matrixcolsizes個int型別元素的陣列,此時matrix[i][j]解釋為*((int*)matrix+i*matrixcolsizes+j)

第二種是矩陣不是線性儲存的,即矩陣是乙個指標陣列,陣列中的每乙個元素是乙個指標,改指標指向乙個由矩陣一列元素組成的陣列,此時matrix[i][j]解釋為*(*(matrix+i)+j

c語言一維陣列做引數傳遞給函式

今天碰到了一維陣列做函式引數的問題,那就扒一扒這個問題 首先拋結論 1 c語言中,當一維陣列做函式引數時,編譯器總是把它解析成乙個指向其首元素的指標。2 實際傳遞的陣列大小與函式形參指定的陣列大小沒有關係。然後舉例說明 下面是乙個元素交換函式,把陣列array i 和array j 交換位置。注意看...

c語言一維陣列做引數傳遞給函式

今天碰到了一維陣列做函式引數的問題,那就扒一扒這個問題 首先拋結論 1 c語言中,當一維陣列做函式引數時,編譯器總是把它解析成乙個指向其首元素的指標。2 實際傳遞的陣列大小與函式形參指定的陣列大小沒有關係。然後舉例說明 下面是乙個元素交換函式,把陣列array i 和array j 交換位置。注意看...

c 成員函式可以將this傳遞給普通函式

include using namespace std class c 必須先申明c void print c c 必須在c的定義之前宣告print class c void call void print c t int main this指標是可以被delete的,delete之後可以訪問成員方...