gpt4 book ai didi

c - C 中的指针以及如何将局部变量作为指针传递

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:20 25 4
gpt4 key购买 nike

我仍然是 C 的菜鸟。我经常使用它,但通常不使用 C 的指针特性。我想做的是将指针传递给本地空间中已经存在的结构在一个函数里面。我有这段代码:

struct WorldCamera p_viewer;
struct Point3D_LLA p_subj;
struct Point2D_CalcRes p_res;
p_viewer.hfov = 25;
p_viewer.vfov = 25;
p_viewer.p.lat = 10.0f;
p_viewer.p.lon = 10.0f;
p_viewer.p.alt = 100.0f;
p_subj.lat = 9.98f;
p_subj.lon = 10.0f;
p_subj.alt = 100.0f;
// Do something interesting here.
compute_3d_transform(&p_viewer, &p_subj, &p_res, 10000.0f);
// Do something interesting here.

compute_3d_transform的原型(prototype)是这样的:

void compute_3d_transform(struct WorldCamera *p_viewer, struct Point3D_LLA *p_subj, struct Point2D_CalcRes *res, float cliph);

我想知道我是否做对了。我正在一个小型微 Controller 上编程,我认为它没有太多的内存保护。损坏一 block 内存可能会在未来导致奇怪的错误,这将很难调试。我试图避免使用 malloc/calloc 函数,因为它们需要专用堆。

最佳答案

使用 addressof 运算符 &

是的,你没看错。

你做对的原因是,例如,&p_viewer 是一个指向(对于你的示例,本地)变量 p_viewer 的指针,它是一个 struct WorldCameracompute_3d_transform 需要一个指向 struct WorldCamera 的指针,因此您作为调用者的意图与被调用者的意图相匹配。

当然,如果没有看到整个意图(只能通过阅读程序,包括 compute_3d_transform,或者至少它的文档),可能会出现逻辑错误,但事实是types match up 已经很舒服了(当然,如果类型是 void * 而不是那么会更让人头疼,因为意图不是很明确)

关于c - C 中的指针以及如何将局部变量作为指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com