标签:blog 2014 ar c++ amp log c file
不看c++ primer 永远不知道自己基础有多差
函数的参数传值一般有两种方式:值传递,引用传递。
值传递有下面两种形式:
void func( int a ) { // } void func1( int *a ) { // }
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断言失败,运行错误
c++ primer 函数传值1,布布扣,bubuko.com
标签:blog 2014 ar c++ amp log c file
原文地址:http://blog.csdn.net/midle110/article/details/38380093