提问人:Roman Ambrosevich 提问时间:10/23/2023 更新时间:10/24/2023 访问量:33
如何在 C 中使用 poiners 在函数中传递静态矩阵?
How to pass static matrix in a function with poiners in C?
问:
我需要通过内存程序进行优化,所以我决定使用带有静态矩阵的指针,但是我对 C 中的指针了解不多,并且程序不起作用(在 VS 程序中抛出异常)
#include <stdio.h>
int Sumofsum(int **matrix, int size) {
int sum = 0;
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
sum += matrix[i][j];
}
}
return sum;
}
void SumofSumOut(int sum) {
printf("Sum of sums of elements in those rows: %d\n", sum);
}
int main() {
int matrix[5][5] =
{
{21,8, 3, 4, 5},
{1, 3, 5, 7, 9},
{2, 4, 6, 8, 9},
{1, 3, 4, 5, 7},
{3, 3, 3, 3,11}
};
int sum, size = 5;
sum = Sumofsum(matrix, size);
SumofSumOut(sum);
return 0;
}
我尝试使用(*矩阵)[5],但这不是我需要的
答:
0赞
ikegami
10/24/2023
#1
int **matrix
指示指向指针的指针。这就是会退化成的东西。int *matrix[]
您没有指针数组。
将数组视为 1d:
int sum_of_sum( int *matrix, int size ) {
int sum = 0;
for ( int i = 0; i < size; ++i ) {
for ( int j = 0; j < size; ++j ) {
sum += matrix[ i * size + j ];
}
}
return sum;
}
sum_of_sum( &matrix[0][0], size )
将指针传递到第一行。
int sum_of_sum( int size, int (*matrix)[ size ] ) {
int sum = 0;
for ( int i = 0; i < size; ++i ) {
for ( int j = 0; j < size; ++j ) {
sum += matrix[i][j];
}
}
return sum;
}
sum_of_sum( size, matrix );
传递指向数组的指针。
int sum_of_sum( int size, int (*matrix)[ size ][ size ] ) {
int sum = 0;
for ( int i = 0; i < size; ++i ) {
for ( int j = 0; j < size; ++j ) {
sum += matrix[i][j];
}
}
return sum;
}
sum_of_sum( size, &matrix );
评论
0赞
ikegami
10/24/2023
另外:实际使用一维数组。
0赞
Roman Ambrosevich
10/24/2023
会消耗比 ?int sum_of_sum( int size, int (*matrix)[ size ] )
int sum_of_sum(int size, int matrix[size][size])
0赞
ikegami
10/24/2023
不。作为参数,表示 。作为参数,这意味着:指向 s 数组的指针。这三者都是 100% 等效的。int matrix[size][size]
int matrix[][size]
int (*matrix)[size]
size
int
0赞
ikegami
10/24/2023
事实上,提供的每个解决方案都使用完全相同的内存量(一个指针)。唯一的区别是指针的类型。甚至在所有情况下,地址都是相同的。但事实并非如此。优化编译器肯定会为每个解决方案生成完全相同的代码。这也适用于实际使用一维数组(未显示)。 占用的内存量与 完全相同。int matrix[5][5]
int matrix[5*5]
评论