首页 > 解决方案 > 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[]){
    ...
}

谢谢

标签: cpointers

解决方案


你的替换不一样。 obj1是一个分配的东西,它可能很大,比如 100 或 1000 字节。但是obj2只是一个指针,在很多典型平台上占用4个字节。

在许多程序中,传递一个指针很有用,并可能为不同的东西更新它的值,比如obj1,而不必复制可能是非常大量的内存。也许obj1是一个默认值,只是为了安全起见,从文件或网络事务中提供更有意义的值。

简而言之,给定的代码肯定是有原因的。 根据项目的历史,它也可能已过时。


推荐阅读