如何在 C 函数中传递二维数组?

问题描述 投票:0回答:3

考虑:

#include <stdio.h>
#include <conio.h>

int arasrc(double a[][], int r, int c, double s);

int main()
{
    double ara[3][3];
    int r, c;
    // 'ara' input
    for(r = 0; r < 3; r++)
    {
        for(c = 0; c < 3; c++)
        {
            printf("\n\tEnter value for array (%d, %d): ", r + 1, c + 1);
            scanf("%lf", &ara[r][c]);
        }
    }
    // Printing the 'ara'
    printf("\n\tArray = ");
    for(r = 0; r < 3; r++)
    {
        for(c = 0; c < 3; c++)
        {
            printf("[ %6.2lf ]", ara[r][c]);
        }
        printf("\n\t\t");
    }
    // Searching in 'ara'
    double s;
    int found;

    printf("\n\tEnter a value to search: ");
    scanf("%lf", &s);
    found = arasrc(ara, 3, 3, s);
    if(found)
    {
        printf("\n\tFound at position (%d, %d).", (r + 1), (c + 1));
    }
    else
    {
        printf("\n\tNot found!");
    }

    getch();
    return 0;
}

// Searching in 'ara'
int arasrc(double a[][], int r, int c, double s)
{
    for(r = 0; r < 3; r++)
    {
        for(c = 0; c < 3; c++)
        {
            if(s == a[r][c])
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
    }
}

我必须进行编码,要求用户在二维数组中提供输入。然后它打印数组并要求用户在数组中搜索值。 主要目标是为“搜索”部分创建另一个功能。

但是我无法将数组传递给函数。不知道问题是什么。请帮我解决这个问题。

arrays c function pointers
3个回答
2
投票

首先,将 r 和 c 作为参数传递,然后将它们重用为本地循环迭代器是没有任何意义的。它们应该与传递的数组的大小相对应,或者它们不应该被声明为参数而是局部变量。

另请注意,

else { return 0; }
没有意义,否则程序将在循环的第一次迭代时离开该函数。

在现代 C 中,建议将二维数组传递给这样的函数:

int arasrc (int r, int c, double a[r][c], double s)
{
    for(i = 0; i < r; i++)
    {
        for(j = 0; j < c; j++)
        {
            if(s == a[i][j])
            {
                return 1;
            }
        }
    }

    return 0;
}

用途:

arasrc(3, 3, ara, s);


2
投票

包括数组大小。使用以下代码。

int arasrc(double a[][3], int r, int c, double s)
{
    for(r = 0; r < 3; r ++)
    {
        for(c = 0; c < 3; c ++)
        {
            if(s == a[r][c])
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
    }
}

0
投票

用途:

#include <stdio.h>
#include <conio.h>

int arasrc(int a[3][3], int s)
{
    for(int r = 0; r < 3; r++)
    {
        for(int c = 0; c < 3; c++)
        {
            if(s == a[r][c])
            {
                return 1;
            }
        }
    }
}

int main()
{
    int ara[3][3];
    int r, c;
    // 'ara' input
    for(r = 0; r < 3; r++)
    {
        for(c = 0; c < 3; c++)
        {
            printf("\n\tEnter value for array (%d, %d): ", r + 1, c + 1);
            scanf("%d", &ara[r][c]);
        }
    }

    // Printing the 'ara'
    printf("\n\tArray = ");

    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            printf("%d", ara[i][j]);
        }
        printf("\n\t\t");
    }

    // Searching in ara
    int s;
    int found = 0;
    printf("\n\tEnter a value to search: ");
    scanf("%d", &s);
    found = arasrc(ara, s);
    if(found = 1)
    {
        printf("\n\tFound ");
    }
    else
    {
        printf("\n\tNot found!");
    }

    return 0;
}

这就是您问题的解决方案。您需要学习语法。只有你的逻辑是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.