c - C 代码:为什么有人会声明一个变量和一个指针,然后将指针指向该变量的地址?
问题描述
我有一些 30 年前的 C 代码正在尝试清理,但我遇到了一些我不知道是否应该更改的东西。代码是这样的:
MY_OBJ obj1;
MY_OBJ *obj2;
int main(int argc, char *argv[]){
obj2 = &obj1;
...
}
然后obj1
再也不会被引用。有什么理由在 C 中这样做吗?我不是全新的,但一些内存管理对我来说仍然很新鲜,我不想搞砸任何事情。如果我重写它并直接声明obj2
如下:
MY_OBJ obj2;
int main(int argc, char *argv[]){
...
}
谢谢
解决方案
你的替换不一样。 obj1
是一个分配的东西,它可能很大,比如 100 或 1000 字节。但是obj2
只是一个指针,在很多典型平台上占用4个字节。
在许多程序中,传递一个指针很有用,并可能为不同的东西更新它的值,比如obj1
,而不必复制可能是非常大量的内存。也许obj1
是一个默认值,只是为了安全起见,从文件或网络事务中提供更有意义的值。
简而言之,给定的代码肯定是有原因的。 根据项目的历史,它也可能已过时。
推荐阅读
- spring-boot - io.netty.util.ResourceLeakDetector.addExclusions(Ljava/lang/Class;[Ljava/lang/String;)V
- javascript - 为什么上传的图像文件在提交表单时显示为空?反应js
- backup - 将数据加载到 Grakn 时出现 NullPointerException
- c# - 尝试在 ASP.NET CORE 3.1 中注册服务时出现 System.AggregateException 异常
- laravel - 十月 CMS - 扩展插件的功能?
- python - Python - Flask - 查询字符串需要在用户上传的图像文件中包含“?q =”
- swift - 带有 tableview 的 popToRootViewController 发生崩溃
- r - 是否有 R 包可以根据数据库中的查询生成 .ris 文件?
- excel - 以分钟为单位计算两个时间之间的时间差
- c++ - 指针重新赋值,释放后堆使用