[英]Implementaion of 2-D array in meomory using C
实际问题 - 在矩阵中找到鞍点。
我的函数调用 - find_saddle_point((Arr,rows);
我的函数原型 - void find_saddle_point(int *,int);
初始化 -
int rows , column ;
int Arr[rows][column];
警告 - 警告:从不兼容的指针类型传递“find_saddle_point”的参数 1
我的临时解决方案 - find_saddle_point(((int *)Arr,rows);
您声明了一个二维数组。
int Arr[rows][column];
在此函数调用中的表达式中使用
find_saddle_point((Arr,rows);
它被隐式转换为指向其第一个元素的指针,并且具有int ( * )[column]
。
但是,相应的参数具有int *
类型,并且没有从int ( * )[column]
类型到int *
类型的隐式转换。
void find_saddle_point(int *,int);
所以编译器会报错。
至于你的临时“解决方案”
find_saddle_point(((int *)Arr,rows);
那么它可能会导致未定义的行为。
像这样声明函数
void find_saddle_point( int, int, int [][*]);
在其定义中,您应指定参数的名称。
void find_saddle_point( int row, int column, int [][column])
{
// ...
}
同样对于数组的维度,最好使用类型size_t
而不是类型int
。
这是一个演示程序。
#include <stdio.h>
void find_saddle_point( size_t, size_t, int a[][*] );
void fill( size_t rows, size_t cols, int a[][cols] )
{
for ( size_t i = 0; i < rows; i++ )
{
for ( size_t j = 0; j < cols; j++ )
{
a[i][j] = i * cols + j;
}
}
}
int main(void)
{
size_t rows = 3;
size_t cols = 5;
int a[rows][cols];
fill( rows, cols, a );
for ( size_t i = 0; i < rows; i++ )
{
for ( size_t j = 0; j < cols; j++ )
{
printf( "%2d ", a[i][j] );
}
putchar( '\n' );
}
return 0;
}
它的输出是
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
当然,这个简单程序中的第一个函数声明是多余的,只是为了演示如何声明具有可变长度数组类型的参数的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.