这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void set(char* str){
str = malloc(10);
strcpy(str, "dog");
printf("\nstr = %s", str);
}
int main(){
char* s;
set(s);
printf("\n%s", s);
return 0;
}
这是我要打印的内容:
str = dog
dog
这是实际打印出来的内容:
str = dog
(null)
这是为什么?我想我正在做的是传递一个未初始化的指针,然后在 set() 中为它分配一 block 内存,然后将“dog”写入其中。到底发生了什么?
最佳答案
C 中没有按引用传递。但是指针和间接提供了一种间接模仿它的便利。
在您的例子中,从 main() 发送到 set() 的是变量“s”中的地址。它 在执行 malloc() 语句之前将具有该值。之后,str 将具有 malloc() 返回的任何地址。
当在main中期望同样的东西时,应该传递的是地址 的's'而不是它持有的地址(如上面的一些例子)。
关于c - 为什么这个函数(char*)不通过 ref 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58576514/