c - 为什么这个函数(char*)不通过 ref 传递?

标签 c

这是我的代码:

#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/

相关文章:

android - 处理 Android 原生 Activity 中的主要命令

C: do-while 与 scanf,多个输入

c - 当询问用户名时getenv返回null?

C:评估字符串的一部分

c - 将 4 位分配给 8 位寄存器

C Hello world : Code Blocks IDE, Windows 上的 MinGW C 编译器

c - 使用多个互斥锁

c - return 语句实际上返回值还是将其存储在函数中?

c - 全局变量未在 Lexer 函数中读取

在 if 语句或 switch 中调用函数无法正常工作