虽然两者都使用pass-by-value
来传递参数,但它们的使用方式有很大的不同。当您将指针作为参数传递给函数时,无论您通过取消引用在函数体指针反映在这些指针指向变量的原始值,尽管这些passed pointers
可main()
宣布的“原始”的指针。你看,多个指针可以指向一个副本变量,因此变量的值可以通过解引用任何这些指针来改变。
但是,虽然您将变量作为参数传递而不是指针,但对这些变量的值的所有操作都不会反映在“原始”变量的值中。这些更改仅限于那些作为参数传递的copies
。
在您的例子中,如果你想分配的return of foo()
值还是那doSomething()
比bar
以外的变量,并打算不改变bar
的值,那么只有通过变量参数是可取的,不是指针。
下面是一些简单的代码示出它:
// Passing variables as arguments
#include<stdio.h>
int foo(int bar){
bar=303;
}
int main(void)
{
int foobar = 0;
printf("The value of foobar before function call is %d\n",foobar);
foo(foobar);
printf("TThe value of foobar after function call is %d",foobar);
}
输出:The value of foobar before function call is 0
`The value of foobar after function call is 303`
// Passing pointers to variables as arguments
#include<stdio.h>
int doSomething();
int foo(int *bar){
*bar = doSomething();
}
int main(void){
int foobar = 0;
printf("The value of foobar before function call is %d\n",foobar);
foo(&foobar);
printf("TThe value of foobar after function call is %d",foobar);
}
int doSomething()
{
return 303;
}
输出:The value of foobar before function call is 0
`The value of foobar after function call is 0`
,最后,约指针使代码复杂,好了,指针是C的最优雅的特点之一,是一旦你一个非常有用的和不可缺少的工具知道如何很好地使用它们。
请阅读更多关于指针的信息,这是一个非常强大的工具,它不仅仅是语法问题。 – Guy 2013-04-28 04:35:06
我想你的意思是'foo(&foobar)'在第一个例子中。 – 2013-04-28 04:35:31
通过使用指针,您不会返回,因为您传递参数的地址,并且它被修改。但是使用方法,一旦它们退出函数,就会离开堆栈,因此您需要返回值。 – Sunny 2013-04-28 04:38:02