c char *问题

这是一个绝对的noob问题,但我似乎没有在任何地方找到适当的答案,所以在这里,给出这个代码:

#include <stdio.h>
#include <stdlib.h>

void initialize( char * buffer)
{
    buffer = malloc(1);
    *buffer='a';
}


int main(void) {
    char * buff;
    buff = malloc(sizeof(char));
    *buff = 'b';
    initialize(buff);
    puts("Contents of buffer are: ");
    puts(buff);
    return 0;
}

main的输出总是’b’,这对我来说真的很奇怪.我认为通过传递指针初始化我可以修改在main中声明的指针的值,但由于某种原因它似乎是通过值传递变量,并且在返回时我有在main中指定的值,因此’b’ .

我想知道为什么这个…我应该传递对指针的引用吗?像char *& ??

问候,
亚历克斯

你在函数中做的第一件事就是重新分配内存中的另一个地方来缓冲一个新的malloc.然后你修改这个新的内存位置,但主要功能中的buff不会被修改,因为它仍然指向旧的位置.

如果你删除malloc,它将工作:

void initialize( char * buffer) {
    *buffer='a';
}

现在我们正在修改初始内存位置.

相关文章
相关标签/搜索