gpt4 book ai didi

c - 函数指针与全局变量

转载 作者:太空狗 更新时间:2023-10-29 15:22:30 27 4
gpt4 key购买 nike

新的 EE,在这里几乎没有软件经验。在过去的几年里在这个网站上阅读了很多问题,这将是我的第一个问题/帖子。还没有完全找到这个问题的答案。

我想知道在函数体内修改全局变量(不将其作为参数传递)与传递变量地址之间的区别/动机。

以下是每个示例,以使其更清楚。假设我正在声明一些函数“peripheral.c”(在“peripheral.h”中使用它们的适当原型(prototype),并在“implementation.c”中使用它们

方法一:

//peripheral.c

//macros, includes, etc

void function(*x){
//modify x
}

.

//implementation.c

#include "peripheral.h"

static uint8 var;

function(&var); //this will end up modifying var

方法二:

//peripheral.c

//macros, includes, etc

void function(void){
//modify x
}

.

//implementation.c

#include "peripheral.h"

static uint8 x;

function(); //this will modify x

是避免使用“全局”变量的唯一动机吗?(此外,如果它只有文件范围,它真的是全局的吗?)

希望这个问题是有道理的。谢谢

最佳答案

接收指向变量的参数的函数更通用。它可用于修改全局变量、局部变量或任何变量。修改全局的函数只能执行该任务并且只能执行该任务。

哪个是首选完全取决于上下文。有时一种方法更好,有时另一种更好。不可能明确地说一种方法总是优于另一种方法。

至于你的全局变量是否真的是全局的,它是全局的,因为你的进程中只有一个变量实例。

关于c - 函数指针与全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887201/

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