• 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断言失败,执行错误











  • 相关阅读:
    python基础之列表解析
    初学者学习python2还是python3?
    给曾经是phper的程序员推荐个学习网站
    详解python2 和 python3的区别
    Python如何进行中文注释
    import方法引入模块详解
    详解python 局部变量与全局变量
    131-19. 删除链表的倒数第N个节点
    65.django中关于跨域访问设置
    130-283. 移动零
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4004355.html
Copyright © 2020-2023  润新知