当前位置: 首页 > 知识库问答 >
问题:

在C语言中通过空格函数返回动态数组

甘祺
2023-03-14

在我的C程序中,我使用了一个带有以下参数的void函数:一个2D int数组、一个用于创建新动态数组的int指针和一个最后的int指针,该指针将保存函数内部发生的计数。因此,动态数组是使用malloc在函数中创建的,一切正常,直到调用函数后在main()中打印其元素。我得到的是垃圾,而不是我应该看到的数字。以下是功能代码:

void availableMoves(int array[][3], int *av, int *counter)
{
    int i, j;
    for (i=0; i<3; i++)
    {
        for (j=0; j<3; j++)
        {
            if (array[i][j] == E)
            {
                printf("%d ", 3*i + j + 1);
                (*counter)++;
            }
        }
    }
    av = (int *) malloc(*counter * sizeof(int));
    if (av == NULL)
    {
        printf("ERROR!");
    }
    else
    {
        for (i=0; i<*counter; i++)
            *(av + i) = 0;
        int pos = 0;
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                if (array[i][j] == E)
                {
                    *(av + pos++) = 3*i + j + 1;
                }
            }
        }
    }
}

共有2个答案

施念
2023-03-14

将双指针用于动态数组int**av而不是int*av

void availableMoves(int array[][3], int **av, int *counter)

通过*av

翟黎明
2023-03-14

在该函数中,av是通过复制传递的指针。因此,当您在函数中更改指针的值时,原始指针将不会被修改。

有两种可能性:

  • 使用指针指针(int**av);
  • 返回分配的指针(返回av)。

因此,要么:

void availableMoves(int array[][3], int **av, int *counter);

或:

int *availableMoves(int array[][3], int *av, int *counter)

电话:

availableMoves(array, &av, &counter);
av = availableMoves(array, av, &counter);
 类似资料:
  • 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return 语句返回。 return 语句的一般形式为: 或者: 有没有 都是正确的,为了简明,一般也不写 。例如: 对C语言返回值的说明: 1) 没有返回值的函数为空类型,用 表示。例如: 一旦函数的返回值类型被定义为 void,就不能再接收它的值了。例如,下面的语句是错误的: 为了使程序有良好的可读性并减少出错,

  • 我尝试编写一个函数,它返回一个整数数组,其中包含按前序排列的二叉树的节点值,即节点值必须出现在其左右子节点的值之前。 > 如果root为NULL,则返回NULL 对于每个节点,左孩子在右孩子之前 例如 这是我的工作,但它不起作用,我的代码中哪里有问题?

  • 本文向大家介绍C语言中scanf函数与空格回车的用法说明,包括了C语言中scanf函数与空格回车的用法说明的使用技巧和注意事项,需要的朋友参考一下 众所周知,C语言中的scanf函数的作用是从标准输入设备(通常是键盘)读取输入值,并存储到参数列表中指针所指向的内存单元。 下面从几个方面说一下一些稍微细节的东西。下面的实验都在vc6.0中通过。 1、scanf的返回值 scanf通常返回的是成功赋值

  • C语言允许函数的返回值是一个 指针(地址),我们将这样的函数称为 指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: 运行结果: C Language↙ c.biancheng.net↙ Longer string: c.biancheng.net 用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和

  • 问题内容: 我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为struct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于 问题答案: 快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的

  • 在 Go 语言开篇中我们已经知道,Go 语言与 C 语言之间有着千丝万缕的关系,甚至被称之为 21 世纪的C语言。 所以在 Go 与 C 语言互操作方面,Go 更是提供了强大的支持。尤其是在 Go 中使用 C,你甚至可以直接在 Go 源文件中编写 C 代码,这是其他语言所无法望其项背的。 格式: 在 import "C" 之前通过单行注释或者通过多行注释编写C语言代码 在 import "C" 之