gpt4 book ai didi

c - 将变量作为参数传递并获得所需的返回值与传递指针基本相同吗?

转载 作者:太空狗 更新时间:2023-10-29 15:52:43 25 4
gpt4 key购买 nike

我尝试了两种将值传递给函数的方法,两种方法似乎都具有相同的效果。

1) 传递指针

int foo(int *bar){
*bar = doSomething();
}

int main(void){
int foobar = 0;

foo(&foobar);
}

2) 传递变量

int foo(int bar){
//do stuff
return bar;
}

int main(void){
int foobar = 0;

foobar = foo(foobar);
}

那么这是否意味着使用适当的 return 可以模拟与使用指针作为参数时相同的效果?它们是否基本相同,只是选择和样式/语法的问题?

我听说指针会使代码复杂化,因此根据一般经验,应该避免使用指针。

最佳答案

C的一半是指针,只有掌握了指针的概念,你才知道C是什么。

并不总是可以只使用返回值。事实上,很多API只是将返回值作为成功/错误指示代码,而真正的返回值放在指针参数中。例如,网络库可能有以下用途:

if (AcceptClient(&ClientInfo) == SUCCESS) { ... }

指针参数也可用于多个返回值:

if (GetConfigString(&StrData,&StrLen) == OK) { ... }

在用 C 编程时,人们无法真正避免使用指针。但是,在支持指针抽象的语言中,即管理指向许多不同对象的指针并且对程序员隐藏了复杂性,使用抽象确实比使用普通指针,因为它减少了处理指针时可能出现的许多问题。例如,在 Object Pascal 中有动态数组、ansistrings、widestrings 等。它们都是指针抽象。不需要处理存储(取消)分配、元素访问、范围检查等。一切都由编译器注入(inject)的代码处理。因此,即使发生错误(例如,访问有效索引之外的元素),也很容易追踪错误。

关于c - 将变量作为参数传递并获得所需的返回值与传递指针基本相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259623/

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