【问题标题】:Change parameter pointer address更改参数指针地址
【发布时间】:2021-09-06 01:07:42
【问题描述】:

我需要一些关于 realloc() 的帮助。

假设我有一个指针,但由于某种原因我必须重新分配这个指针,我该如何将此指针还给调用我的函数的人?

示例:

char* fancy = malloc(sizeof(char))
fancyFunction(char* fancy)
{
    fancy = realloc(200 * sizeof(char));
}

假设 realloc() 必须将我的指针“fancy”中的所有垃圾移动到一个新地址。 如果不使用“return”,我如何才能返回这个新地址?

有没有办法将指针本身的地址传递给地址? 喜欢:

fancyFunction(&fancy)

而“fancy”本身就是上面提到的指针。 那我该怎么做呢?

【问题讨论】:

  • return fancy; 有什么问题?
  • 根据定义,sizeof (char)总是 1。没必要放到代码里,乱七八糟的。

标签: c memory memory-management heap-memory


【解决方案1】:

是的,正如你所说:

fancyFunction(&fancy)

(添加 ; 以使其成为完整的声明)

被调用者会是这样的:

/* the argument is a pointer to char* */
void fancyFunction(char** fancy)
{
    /* dereference the pointer (to char*) to assign */
    *fancy = realloc(*fancy, 200 * sizeof(char));
}

【讨论】:

    【解决方案2】:

    假设 realloc() 必须将我的指针“fancy”中的所有垃圾移动到一个新地址。我怎样才能返回这个新地址……

    realloc 本身的做法完全相同:返回新值:

    char *fancyFunction(char *fancy) {
        return realloc(fancy, 200);
    }
    
    fancy = fancyFunction(fancy);
    

    ...不使用'return'?

    另一种方法,如另一个答案所示,是通过指针传递fancy 的值,并修改指针。但在大多数情况下,默认情况下(即没有具体的反对理由),使用返回值是首选。

    【讨论】:

    • 如果您以上述方式使用我的功能,它会更加方便和直观。当然只是为了我的好奇心。
    • @Yuki 如果您以上述方式使用我的功能,它会更加方便和直观 不,不是。必须添加另一个级别的间接使其更难使用、更难理解并且更容易出错。只需返回值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多