首页 > 解决方案 > 为什么这个函数(char *)不通过 ref 传递?

问题描述

这是我的代码:

#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() 中分配一个内存块,然后将“狗”写入其中。究竟发生了什么?

标签: c

解决方案


C 中没有传递引用。但是指针和间接提供了一种间接模仿的工具。

在您的情况下,从 main() 发送到 set() 的是变量“s”中的地址。在 malloc() 语句执行之前,它将具有该值。之后,str 将拥有 malloc() 返回的任何地址。

当 main 中预期相同的东西时,应该传递的是 's' 的地址,而不是它所持有的地址(如上面的一些示例)。


推荐阅读