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
{
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
相关文章推荐
- 1.正则表单验证2.全局变量作为形参传入函数内部操作之后,变量的值在全局上不发生改变的解决方法
- 为什么C++成员函数不能作为C-Style回调函数?
- 为什么我不能向接受const char ** 的函数传入char **?
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- C++之静态成员函数为什么不能为虚函数
- C++的const类成员函数(解释为什么非const成员函数不能访问const对象的数据成员)
- 为什么不能在函数体内部初始化一个由extern关键字标记的变量?
- 如果改变了形参数组的值 从而在调用函数期间 形参数组就和实参数组共占同一段内存单元 为什么形参数组从实参数组那里得到起始地址后 请问各位C语言高手:当用数组名作函数参数时 也就该变了实参数组的值
- C++为什么不能通过函数返回值区分函数重载?
- C++中为什么构造函数不能为虚函数原因
- C++ :函数中无需改变传入参数的值时,定义时把 “Item & x ” 都改成 \"const Item & x\"
- C C++全局变量初始化 initializer element is not constant 错误 c++中为什么不能对全局变量在函数外赋值
- 为什么不能够 向接受 const char ** 参数的函数,传入 char ** 参数?
- stm8函数传入形参值改变了
- 函数的汇编代码!!!!(及其函数形参传入方式、函数内部的局部变量存储方式)
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- 为什么我不能向接受const char ** 的函数传入char **?
- C++ 函数使用形参传入二维数组实参的方法
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- C语言易错点(函数里修改传入变量的值不会改变传入变量的指针)