繁体   English   中英

使用 C 在内存中实现二维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM