首页 > 解决方案 > 从单独的函数修改数组元素

问题描述

我知道我在这里看到了几个非常相似的问题,但我似乎无法理解它们或将它们的解决方案应用于我的代码以获得所需的结果。

我正在尝试从我的 pop() 和 push() 函数修改一个充当堆栈的数组。很明显,函数可以读取您传递给它们的数组,但它们不能更改在我的主函数中声明的实际数组的值。所以它更像是函数作用于你在 main 中给它的数组的一种副本。(如果我错了请纠正我)

每次我想尝试在互联网上找到的新指针技巧时,我都厌倦了更改代码中的大约 14 行,所以我制作了一个非常简单的程序,我可以轻松地修改它,直到得到我想要的结果。

#include <stdio.h>

//supposedly changes the 3rd element of the array from 2 to 3
int modifyArray(int *arr[], int len)
{
    printf("changing 2 to 3\n");
    arr[3] = 3;
    return 0;
}

//desired output: 0, 1, 3, 3, 4
//current output: 0, 1, 2, 3, 4,
int main()
{
    int arr[5] = { 0, 1, 2, 3, 4 };

    modifyArray(arr, 5);

    for (int i = 0; i < 5; i++)
    {
        printf("%d, ", arr[i]);
    }
    return 0;
}

我在互联网上看到了很多使用一些我完全不理解的 malloc() 函数的解决方案(因此当我尝试使用它时似乎无法编译它)以及所有其他我尝试过的方法要么由于数据类型不兼容而无法编译,要么抛出内存访问异常。

任何帮助将不胜感激

标签: arrayscfunctionpointers

解决方案


这是您的代码语法中的一个小错误。在您的函数中获取参数时,您正在声明类似int *arr[]但它应该只存在*[]存在。你应该写喜欢int modifyArray( int *arr, int len )int modifyArray( int arr[], int len )

您应该在运行代码时收到警告。

我认为这应该工作!


推荐阅读