标题:[求助] 关于函数返回参数的问题!
只看楼主
blackkey
Rank: 1
等 级:新手上路
帖 子:159
专家分:0
注 册:2005-6-8
得分:0 

看我理解的是不是对的~~

char s[]="123456789" ;
char *str ;

str = s ; //其中str 指的是 S 的地址 ;
*str = s ; //其中的*str指的是 S 的内容~

是这样理解的吗/


2006-07-05 17:19
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 
以下是引用SunShining在2006-7-5 14:12:45的发言:
#include <string.h>
#include <stdio.h>
void test( char **str1 ,char **str2 ,char *str3 )

int main( )
{
char strp[] = "012346567890123465678901234656789012346567890123465678901234656789" ;
char *p1 ;
char *p2 ;
test( &p1 , &p2 , strp ) ;
puts(p1);
puts(p2);

}
/**************函数(test)******************/
void test( char **str1 ,char **str2 ,char *str3 )
{
*str1 = str3 ;
*str2 = *str1 ;

}

这不给你改过了吗


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-05 17:24
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 
以下是引用blackkey在2006-7-5 17:19:32的发言:



*str = s ; //其中的*str指的是 S 的内容~

是这样理解的吗/

S的内容是什么?


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-05 17:24
blackkey
Rank: 1
等 级:新手上路
帖 子:159
专家分:0
注 册:2005-6-8
得分:0 
这个东西就是难搞~~

2006-07-05 17:33
blackkey
Rank: 1
等 级:新手上路
帖 子:159
专家分:0
注 册:2005-6-8
得分:0 

*str1 是指向 str3 的地址

&p1 调用地址

对吗??



不明白 **str1 ;

[此贴子已经被作者于2006-7-5 17:36:49编辑过]


2006-07-05 17:34
lxs5216
Rank: 1
等 级:新手上路
帖 子:144
专家分:0
注 册:2006-2-3
得分:0 
**str1估计是指向指针的指针,不过SunShining师兄讲的我也没明白,到底为什么没有返回呢!
2006-07-05 19:11
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 
以下是引用lxs5216在2006-7-5 19:11:31的发言:
**str1估计是指向指针的指针,不过SunShining师兄讲的我也没明白,到底为什么没有返回呢!

**str1 是指向指针的指针.

叫俺怎么说呢!!

大家都知道..函数的参数传递只是值传递吧.

如果想保存改变的值.只能用指针.(不太严谨.当然全局变量也可以..不过我们现在只讨论指针)

而指针改变的是它所指向的内容...

LZ的程序中..是想改变其指针本身..而就象平常一样..指针也仅仅是值传递.

所以..我们需要再用一个指针来指向这个指针..同而改变这个指向指针的指针的内容..也就是想要改变的指针本人

请注意 指针与指针所指向内容的区别.

[此贴子已经被作者于2006-7-5 19:20:45编辑过]


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-05 19:18
lxs5216
Rank: 1
等 级:新手上路
帖 子:144
专家分:0
注 册:2006-2-3
得分:0 
以下是引用SunShining在2006-7-5 14:12:45的发言:
#include <string.h>
#include <stdio.h>
void test( char **str1 ,char **str2 ,char *str3 )

int main( )
{
char strp[] = "012346567890123465678901234656789012346567890123465678901234656789" ;
char *p1 ;
char *p2 ;
test( &p1 , &p2 , strp ) ;
puts(p1);
puts(p2);

}
/**************函数(test)******************/
void test( char **str1 ,char **str2 ,char *str3 )
{
*str1 = str3 ;
*str2 = *str1 ;

}

感谢SunShining师兄的解释,结合程序很容易理解了。

2006-07-05 19:29
blackkey
Rank: 1
等 级:新手上路
帖 子:159
专家分:0
注 册:2005-6-8
得分:0 
以下是引用SunShining在2006-7-5 19:18:24的发言:

**str1 是指向指针的指针.

叫俺怎么说呢!!

大家都知道..函数的参数传递只是值传递吧.

如果想保存改变的值.只能用指针.(不太严谨.当然全局变量也可以..不过我们现在只讨论指针)

而指针改变的是它所指向的内容...

LZ的程序中..是想改变其指针本身..而就象平常一样..指针也仅仅是值传递.

所以..我们需要再用一个指针来指向这个指针..同而改变这个指向指针的指针的内容..也就是想要改变的指针本人

请注意 指针与指针所指向内容的区别.






谢谢SunShining师兄不厌其烦 的讲解~~~虽然我只听懂了一部分~~ 还是非常感谢SunShining

再次谢谢拉`


2006-07-06 09:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-76680-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.230097 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved