C 函数传递参数时,如果只是引用实参的值而不需要改变实参的值,直接传值就行了,如果在函数中需要改变实参的值时,就必须传地址才行,用指针去修改所指向的值。像 bruce 兄说的那样,函数实参传递给形参时,其实是对实参的一个拷贝,所以在函数中修改行参的值是不会影响实参的。但是用指针可以修改其指向的地址中的值。同样如果实参是一个指针的话,如果想要在函数中修改这个指针的值时,则需要传递一个二维指针进去。。
int main(void)
{
do_it(“I love openSUSE.”)
return 0;
}
void do_it(char* ch)
{
printf(ch);
}
俺也是自学的 c 语言。走了不少弯路,就学习给点建议吧。要看好书,特别初学容易被误导,不过 the C Programming Language 还是不适合初学填血肉的吧。首先它不是标准 c,它写得好也只有内行看得出,太精炼了。可以看看《c 和指针》填血肉,讲得很细,且突出指针。在用《c 语言解惑》和《c 语言的陷阱与缺陷》打实基础。两本很薄的小册子。虽然这三本也不是用最新的 c99
但比较接近了。 the C Programming Language 留到最后去看吧。
传址需要理解指针了,指针号称是 C 语言的灵魂,传址是把变量再哪儿存着告诉形参,在函数中编辑参数所指向的地址,就是编译原来的变量。(不懂指针很晕的)、、、举个例子,还是服务器文档,就像你这个参数存的不是文档,而是文档的 url,你用编辑器打开 url,编辑器自动打开的是服务器里的文档(好像这个我还不知道那个编译器支持,比喻而已),你再编辑文档的时候,就是编辑服务器的文档、、、你编辑玩,再去下载,下载出来的就是你编辑过的文档、、、
C++ 还有一种传递参数的方法:引用。引用传址也可以改变原参数的值,引用可以理解为一个别名,等于你直接把参数交给函数处理、、你改变引用的值也就改变原参数的值、、、这个就像本来就一件东西,在我这里叫 a,你(函数)要拿去用,你叫他 B,你用过了,再还给我(调用函数的),你把里面内容改变了,还我的时候也改变了、、、
Java 的比价坑爹、、、至少我比较喜欢 C++ 的这样认为、、、Java 文档说的是全部传值、、但是在自定义类生成的对象中,又是引用、、java 完全废除了指针,在 C++ 中对象在栈中和堆中都可以分配,java 中只能在堆中分配的、、、
C# 支持传值和引用,C# 中还有个 out 关键字很好用,这个是在函数中为参数复制,相当于可以有返回值、、、、