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 );
{
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
- C/C++ 为什么在函数内部修改形参并不能真正地改变传入形参的值?
- 1.正则表单验证2.全局变量作为形参传入函数内部操作之后,变量的值在全局上不发生改变的解决方法
- C语言易错点(函数里修改传入变量的值不会改变传入变量的指针)
- 函数的汇编代码!!!!(及其函数形参传入方式、函数内部的局部变量存储方式)
- C语言函数内部改变指针本身
- C语言函数内部改变指针本身
- 在函数中改变传入的参数值:引用参数的使用
- python 多线程编程并不能真正利用多核的CPU
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- 关于AVL平衡二叉树的c语言实现(函数内部改变指针本身)
- C++——复制构造函数的形参为什么要是const引用
- 方法形参操作改变传入前实际参数。
- C的内部函数和外部函数
- C的内部函数和外部函数
- 为什么在C语言中函数的声明很重要
- 如果改变了形参数组的值 从而在调用函数期间 形参数组就和实参数组共占同一段内存单元 为什么形参数组从实参数组那里得到起始地址后 请问各位C语言高手:当用数组名作函数参数时 也就该变了实参数组的值
- 解决一个吐血问题,在winform编程中修改控件的X,Y坐标值,并不能修改控件的位置
- List,Set,Map用法以及区别
- java web 项目在tomcat上显示空白页的解决
- 1041. Be Unique (20)解题报告
- oracle 搜索条件是时间在每天8点到22点。
- json获取以某某开头的key值
- C/C++ 为什么在函数内部修改形参并不能真正地改变传入形参的值?
- HDU2602Bone Collector
- 极限的求法
- 用线程池和不用线程池的区别是什么?
- HTML字符实体与转义字符串
- 按钮延迟点击的代码
- Android Studio项目中需要忽略的内容
- java设计模式——工厂方法模式
- 响铃:“内外兼修”的网易,能否在在线教育上成就“第四极”?