c char*问题

Ale*_*oVK 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

问候,亚历克斯

krt*_*tek 5

你在功能做的第一件事是重新分配的内存另一个地方buffer用新的malloc.然后你修改这个新的内存位置,但是buff在main函数中没有修改,因为它仍然指向旧的位置.

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

void initialize( char * buffer) {
    *buffer='a';
}
Run Code Online (Sandbox Code Playgroud)

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

  • +1并且,就这样OP了解发生了什么,指针是通过复制传递的,所以它是一个完全不同于你在main中声明的指针,但它仍然指向相同的内存位置.因此,修改*它已指向*的内容按预期工作,但修改指针本身只是修改传递给函数的副本.如果需要修改指针,则必须将指针传递给指针,即`char**`,然后将malloc的返回值设置为等于`*buffer`. (2认同)