C/C++ 为什么在函数内部修改形参并不能真正地改变传入形参的值?

来源:互联网 发布:画人设的软件 编辑:程序博客网 时间:2024/05/16 09:41
void GetMemory( char*p )
{
 p = (char*) malloc( 100 );
}
void Test( void )
{
 char*str = NULL;
 GetMemory( str );
 strcpy( str, "hello world" );
 printf( str );
}

试题4传入中GetMemory(char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
char *str = NULL;
GetMemory( str );

后的str仍然为NULL;


答案:

一般有两种传递方式:

1)值传递----包括(数值传递,指针传递) 

2)引用传递

你问题中的指针传递,其实就是值传递:(下面这个你能看懂么)

void GetMemory( char p )
{
 p = ‘a’;
}
void Test( void )
{
 char str;
 GetMemory( str );
 pinrtf("%c",str);
}

---------------------------------------------

引入你的这个问题,你虽然将Test中的指针地址传过去了,char *p确实也接受到了,但是:

p = (char*) malloc( 100 );这条语句中,malloc会返回一个新的地址,同时赋值给p,p已经不是原来的地址了。

void GetMemory( char*p )
{
 p = (char*) malloc( 100 );
}
void Test( void )
{
 char*str = NULL;
 GetMemory( str );
 strcpy( str, "hello world" );
 printf( str );
}

此时,p是指向一块大小为100的空间。但是str还是指向NULL



0 0
原创粉丝点击