指针问题面面看
在C中,形参的改变与实参的确没有一点关系,所以对于函数来说通常只是利用函数名和return传递一个返回值,所以在老谭的书里就出现了“值传递(单向)”这样的字眼,而后一些书中就发挥出“双向”这样的名词,相信在C99这种标准里不会出现“双向”的,但是国人引入“双向”就是方便我等菜鸟理解的!!
双向给我的理解就是实现了形参与实参的联系,一般意义上理解的是函数调用,把,参与函数内的运算,如果是“双向的”,那就会把形参的改变传递给了实参。
如果再对双向深究,那就1000000000%会出错了。因为“双向”是国 人的名词>。wo
我的老师说。指针很难。实际上就是理解难。不过双向这个词我就在C99里看到。可能是书的问题。
说真的。在 int *ti ; ti=pa;pa=pb;pb=ti; 里在函数里是交换了。可是还是没双向。也就是在main里还是没交换成功。
如果换成 int ti; 那么也不会成功的。
书上没有说数组交换的。例题都是这样交换。
int a=5;b=10;
int *paa=&a,*pbb=&b; //指的是单个的数
huang(paa,pbb);
}
huang( int pa,int pb)
int ti;
ti=*pa;*pa= *pb;*pb=ti; //这些都是内容值交换,不是交换指针
如果是数组或其他的。就要象穆扬说的,
要, main()
{ huang(&paa,&pbb);
}
huang(int **pa,**pb)
int *ti;
ti=*pa;*pa=*pb;*pb=ti; //要这样
----------------解决方案--------------------------------------------------------
千万注意*paa和paa的区别
----------------解决方案--------------------------------------------------------
后面这句
huang(int **pa,**pb)
int *ti;
ti=*pa;*pa=*pb;*pb=ti;
我这样理解,*pa.是取**pa的中*pa 的地址。不是pa。是pa地址的地址 中指针(*pa)的地址 给指针ti.
对么?
----------------解决方案--------------------------------------------------------
int fun(int **paa,int **pbb); file://现在交换2个数组,用指针;
{
int ti; file://有人说用 *ti,
ti=*paa;*paa=*pbb;*pbb=ti;
}
这个函数就能交换2个数组的值?!
有这么神通广大?
上面的函数仅仅交换了指针的值,两个数组里的值怎么会随之改变呢?
就好比,刻舟求剑。改变了原先记录丢剑处的记号位置,而剑还在原处未动啊!
**************************
要交换两个数组的值(不是仅仅读出值哦)必须要重新给两个数组中的元素敷值(一般要用循环)!
因为数组名是常量(重要!),是不能被重新敷值的。所以用指针只是小手段,而且
针对于楼主的这个问题来说,不用指针会更快捷简明。(用数组名加循环即可)
[此贴子已经被作者于2006-7-14 21:58:18编辑过]
----------------解决方案--------------------------------------------------------
不。指针可以 双向的。
可以双向,那是一般情况
用二级看一级才能看出那个人的想法
以后你遇见了就有体会了
----------------解决方案--------------------------------------------------------
“指针是一个特殊的变量”
这句话是错误的。
应该说
“指针是一个特殊的类型”
指针确实是一个特殊变量,而且unsignedint型(是这么写吧,哈哈,喝大了)
[此贴子已经被作者于2006-7-14 21:44:34编辑过]
----------------解决方案--------------------------------------------------------