您的位置:首页 > 编程语言 > C语言/C++

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

2016-10-28 15:23 961 查看
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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐