gpt4 book ai didi

c - C函数中的全局变量和返回多个可变长度数组(指针)

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:51 26 4
gpt4 key购买 nike

我有一些编程经验,但对 C 语言的了解不多。

我有一个相当大的 C 文件。其中有多个按顺序执行的函数 - 因此在这种特殊情况下,实际上没有函数被调用两次,为了便于阅读,它们被分解了,因为每个函数仍然有一个单独的目的。

这个程序对几个变长的double长数组做了很多计算,所以都是指针。两个问题:

1) 从一开始就计算一次然后作为许多后续函数的输入的变量——我应该在这个文件中将它们设为全局变量吗?根据我使用高级语言编程的经验,全局变量并不好。 C 不是这种情况吗?为什么?

2) 当我的函数 1 想要返回多个指针(例如,每个指针指向一个长度为 n 的 double 组)时,比如相关的 double *p1、double *p2、double *p3,我可以将它们组合成一个结构:

struct pointers {
double *p1, *p2, *p3;
} ptr;

foo1会将double *input作为输入,计算出ptr->p1, ptr->p2, ptr->p3,然后ptr稍后作为foo2的输入。我应该写吗

struct pointers *foo(double *input)

void foo1(double *input, struct pointers ptr)

void foo1(double *input, struct pointers *ptr)

为什么 C 函数通常是“void”函数,除非它只返回一个 int 或 double 变量?将输入和输出都作为参数 - 是否令人困惑?

我应该在 foo1 内部还是外部初始化 ptr->p1、ptr->p2、ptr->p3?

请注意,foo() 是将依次调用 foo1、foo2 的主要函数。

最佳答案

回答问题

1 ) 它实际上取决于数据的大小范围。如果您有少量要用作函数内计算的一部分,则在函数内对其进行初始化更有意义,从而将其范围限制在函数内。

如果数据大小只有几兆字节甚至超过几十千字节,那么使用 malloc 在堆上进行分配是有意义的。

您可以在文件中包含全局变量,但您必须担心同步对它们的访问——谁在修改它们以及修改它们的顺序——

回答问题 2) 编写函数签名的更好方法是

struct  {
double output1;
double output2;
double output3;
} output_t;

函数签名为:

ReturnCode foo ( double input , struct output_t * output);  

其中 ReturnCode 可以是 int 值,指示操作是成功还是失败。

关于c - C函数中的全局变量和返回多个可变长度数组(指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994069/

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