c - 为什么这个函数(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 中没有传递引用。但是指针和间接提供了一种间接模仿的工具。
在您的情况下,从 main() 发送到 set() 的是变量“s”中的地址。在 malloc() 语句执行之前,它将具有该值。之后,str 将拥有 malloc() 返回的任何地址。
当 main 中预期相同的东西时,应该传递的是 's' 的地址,而不是它所持有的地址(如上面的一些示例)。
推荐阅读
- html - 拖动时退出禁止光标
- netsuite - ReferenceError - 未定义上下文 (Netsuite)
- java - Gradle.properties 未传递到我的 Java 应用程序
- windows - 为什么 signtool.exe 以管理员身份运行时只能找到证书?
- mysql - 全新安装后无法设置mysql root密码
- android - 辅助功能服务:获取可以即时交互的视图(与语音访问相同)?
- angular - 如何使 Angular 8 与 IE11 兼容?
- vb.net - 安装时的奇怪问题
- ubuntu - Bosh lite 中的“无法连接到总线:没有这样的文件或目录”
- jquery - 如何使用 jQuery 选择插入到文本字段中的文本?