- 论坛徽章:
- 0
|
由于书上只简单说运用指针变量做行参能改变主调函数的直,说什么值传递,但并未怎么解释,至少没明着说
清楚,让我们这些新手很困惑,看完书后总结了下子,说点,请大哥大姐帮忙看看说错了没:
==================
如下例
- #include <stdio.h>
- void change(int *, int *);
- int main(int argc, char *argv[])
- {
- int i=190, j=101;
-
- change(&i, &j);
- printf("i=%d\nj=%d\n", i, j);
-
- return 0;
- }
- void change(int *a, int *b)
- {
- int tmp;
- if(*a>*b)
- {
- tmp = *a;
- *a = *b;
- *b = tmp;
- }
- }
复制代码
[1]如果单把值拷贝给行参,在被调函数中被交换的只是行参的值,不会对实参产生影响;
[2]而我们拷贝实参的地址给行参,在被调函数里被交换的虽然还是行参,但现在行参已经带上了那个地址,
所以此时交换了内存中实际的地址,那么存在那个地址中的实参也不得不随地址而变,
因为内存中地址是唯一的(对吗?)
[3]而为什么要用指针变量做参数,我想是不得以了,因为存放地址就要用指针变量了,就顺理成章了,想书上直接说这样能改变很没条理,而且你看*a=*b,实际上就是"j=i;", 前者不仅速度慢而且目的不明。但由于指针是变量, 我们可以通过改变它们的指向, 以间接访问不同的变量, 这给程序员带来灵活性, 也使程序代码编写得更为简洁和有效。
说得不好,请大家评评吧,谢谢
[ 本帖最后由 wodetian 于 2007-2-4 14:15 编辑 ] |
|