当前位置: 代码迷 >> C语言 >> 指针问题面面看
  详细解决方案

指针问题面面看

热度:131   发布时间:2006-07-14 07:29:24.0
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-13 23:29:24
穆扬

等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
  得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-13 23:37:05
★红狼

等 级:论坛游民
帖 子:190
专家分:17
注 册:2006-7-12
  得分:0 
以下是引用lxs5216在2006-7-14 7:23:03的发言:
在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; //要这样


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-14 08:08:34
lxs5216

等 级:新手上路
帖 子:144
专家分:0
注 册:2006-2-3
  得分:0 
同意穆扬的说法!!

千万注意*paa和paa的区别
----------------解决方案--------------------------------------------------------
后面这句
huang(int **pa,**pb)
int *ti;
ti=*pa;*pa=*pb;*pb=ti;

我这样理解,*pa.是取**pa的中*pa 的地址。不是pa。是pa地址的地址 中指针(*pa)的地址 给指针ti.

对么?

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-14 12:16:53
grub2linux

等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
  得分:0 

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编辑过]


----------------解决方案--------------------------------------------------------
以下是引用★红狼在2006-7-12 22:44:35的发言:
不。指针可以 双向的。

可以双向,那是一般情况
用二级看一级才能看出那个人的想法
以后你遇见了就有体会了
----------------解决方案--------------------------------------------------------

以下是引用穆扬在2006-7-12 9:36:35的发言:
“指针是一个特殊的变量”

这句话是错误的。
应该说
“指针是一个特殊的类型”

指针确实是一个特殊变量,而且unsignedint型(是这么写吧,哈哈,喝大了)

[此贴子已经被作者于2006-7-14 21:44:34编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案