从函数改变值

Posted

技术标签:

【中文标题】从函数改变值【英文标题】:changing value from function 【发布时间】:2011-05-02 04:30:02 【问题描述】:

我想在函数中更改一个 2dim 字符数组。

我像这样分配空间

char **u;
u = new char * [ MAX_DEPTH ];
for (i=0; i<MAX_DEPTH; i++)
    u[ i ] = new char [ BUFFER_SIZE ];

函数看起来像

rem(char ***arr, int max_length, char *url)

    int idx=0;
    char * p;
    int i;

    p = strtok (url,"/"); 

    while (p != NULL && idx < max_length)
    

        for (  i=0; i<maxUrlSize-1 && p[i] != '\0'; i++)
            (*arr)[idx][i] = p[i];
        for (     ; i< maxUrlSize-1; i++)
            (*arr)[idx][i] = '\0';
    

该函数将在我的主程序中使用。

rem( &u, MAX_LEN, url);

但是离开函数后,里面什么都没有。有人能解释一下如何以这种方式使用指针吗?

【问题讨论】:

没有什么明显的错误,但多于 1 行的片段确实有帮助 - 我们必须推断函数实现是 rem(char ***tmp, int ?) 代码甚至开始有意义。 你贴的代码都是正确的。 从函数来看,这段代码看起来绝对没问题。您能否提供有关如何从程序的其他部分调用此方法的代码。 @Roby:请编辑并对齐您的代码。一位成员第一次为你做这件事时付出了很大的努力,你应该从那里学习......不能让你的编辑无限循环然后反编辑以使其可读。 没有看到rem 中的实际代码,您所拥有的看起来还不错。但是,除非您在函数rem 内重新分配分配给u 的空间,否则您实际上不需要在此处传递&amp;u。只需传递 u 即可。接收参数tmp 应该只是char **,您可以使用tmp[i][j] 访问它。编辑评论:tmp 是什么?看起来像一个全球性的。 【参考方案1】:

您需要将函数中对tmp 的引用更改为arr。您根本没有访问参数arr。此外,这里不需要char ***,因为您不会更改分配给u 的空间。相反,您应该有参数char **arr,您可以以arr[i][j] 访问它。然后你应该将u 传递给rem,而不是&amp;u

【讨论】:

你是对的,我删除了几行代码并将其粘贴在一起... tmp 是 arr ... 对不起,使用了错误的名称:-/

以上是关于从函数改变值的主要内容,如果未能解决你的问题,请参考以下文章

为啥传递给函数的协议默认值不会改变,即使函数在子类化时会改变?

38 py改变函数参数的值关键字参数和参数默认值函数中可变参数将序列中的元素值作为函数对应的参数值传

为啥传递给函数的指针的值没有改变? [复制]

SQL Server 2016 改变表值函数——改变安全策略

能不能通过改变函数形参数组的值是实参数组的值改变?

函数默认值改变时,调用的例子