当前位置: 代码迷 >> C语言 >> [求助] 关于函数返回参数的问题!
  详细解决方案

[求助] 关于函数返回参数的问题!

热度:192   发布时间:2006-07-05 17:19:32.0

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

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

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

是这样理解的吗/


----------------解决方案--------------------------------------------------------
以下是引用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 ;

}

这不给你改过了吗
----------------解决方案--------------------------------------------------------

以下是引用blackkey在2006-7-5 17:19:32的发言:



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

是这样理解的吗/

S的内容是什么?


----------------解决方案--------------------------------------------------------
这个东西就是难搞~~
----------------解决方案--------------------------------------------------------

*str1 是指向 str3 的地址

&p1 调用地址

对吗??



不明白 **str1 ;

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


----------------解决方案--------------------------------------------------------
**str1估计是指向指针的指针,不过SunShining师兄讲的我也没明白,到底为什么没有返回呢!
----------------解决方案--------------------------------------------------------
以下是引用lxs5216在2006-7-5 19:11:31的发言:
**str1估计是指向指针的指针,不过SunShining师兄讲的我也没明白,到底为什么没有返回呢!

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

叫俺怎么说呢!!

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

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

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

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

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

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

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


----------------解决方案--------------------------------------------------------
以下是引用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师兄的解释,结合程序很容易理解了。


----------------解决方案--------------------------------------------------------
以下是引用SunShining在2006-7-5 19:18:24的发言:

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

叫俺怎么说呢!!

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

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

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

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

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

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






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

再次谢谢拉`
----------------解决方案--------------------------------------------------------

  相关解决方案