首页 > 代码库 > c++ primer 函数传值1
c++ primer 函数传值1
不看c++ primer 永远不知道自己基础有多差
函数的参数传值一般有两种方式:值传递,引用传递。
值传递有下面两种形式:
void func( int a ) { // } void func1( int *a ) { // }
对于 func 和func1都是通过拷贝内存来实现的
func1
int m = 10 ; func1( int *a ) ; //处理过程为: a = &m ; //然后通过指针 *a 对 m进行间接操作
传引用
void func2( int &a ) { // }引用就是变量的一个别名,不会发生内存的拷贝
典型的面试题:
void GetMemory1(char *p) { p = (char *)malloc(100); } void Test1(void) { char *str = NULL; GetMemory1(str); strcpy(str, "hello world"); printf(str); } <p> </p><pre name="code" class="cpp">// p = str; // p = malloc(...); //p和str有半毛线关系?char *GetMemory2(void){ char p[] = "hello world"; return p;}void Test2(void){ char *str = NULL; str = GetMemory2(); printf(str);}char *GetMemory3(void){ return "hello world";}void Test3(void){ char *str = NULL; str = GetMemory3(); printf(str);}//Test3 中打印hello world,因为返回常量区,而且并没有被修改过。Test2中不一定能打印出hello world,因为指向的是栈。void GetMemory4(char **p, int num){ *p = (char *)malloc(num);}void Test4(void){ char *str = NULL; GetMemory3(&str, 100); strcpy(str, "hello"); printf(str); }//内存没释放void Test5(void){ char *str = (char *) malloc(100); strcpy(str, "hello"); free(str); if(str != NULL) { strcpy(str, "world"); printf(str); }}//str为野指针,打印的结果不得而知void Test6(){ char *str=(char *)malloc(100); strcpy(str, "hello"); str+=6; free(str); if(str!=NULL) { strcpy(str, "world"); printf(str); }}//VC断言失败,运行错误
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。