zoukankan      html  css  js  c++  java
  • C++中数组([]),指针(*),指针引用(*&)作为形参的区别

    c++中数组的名字是一个地址常量,不可修改;指针是一个地址变量,可以修改。

    void fun_ptr(int *test) {//指针为形参
    	for (int i = 0; i < 10; i++)
    	{
    		test[i] = 0;
    	}
    }
    
    void fun_array(int test[]) {//数组为形参
    	for (int i = 0; i < 10; i++)
    	{
    		test[i] = 0;
    	}
    }
    
    int var_array[10] = { 0,5,9,8,6,4,7,1,3,2 };
    	int* var_ptr = new int[10];
    	var_ptr[0] = 0; var_ptr[1] = 5; var_ptr[2] = 9; var_ptr[3] = 8; var_ptr[4] = 6; var_ptr[5] = 4; var_ptr[6] = 7; var_ptr[7] = 1; var_ptr[8] = 3; var_ptr[9] = 2;
    
    
    //形参数组,实参数组
    //值可以改变
    fun_array(var_array);
    
    
    //形参数组,实参指针
    //值可以改变
    fun_array(var_ptr);
    
    
    //形参指针,实参指针
    //值可以改变
    fun_ptr(var_ptr);
    
    
    //形参指针,实参数组
    //值可以改变
    fun_ptr(var_array);
    

      

    相同:

    • 均可以对所指向的数据的值进行修改
    • 均可以使用下标索引

    不同:

    • 数组名为地址常量,不可赋值;指针为地址变量,可赋值(可赋值但是无法改变值,如果要改变值,需要用指针引用为形参)

    常用的传参有三种类型,传值,传地址,传引用

    传引用中有指针引用(*&)作为形参的,传引用使得所传变量的值可以在函数中被改变且保持,指针引用也一样。

    上面我们提到了指针可以在函数中赋值,但是其值在退出函数中保持不变的问题,指针引用就可以解决这一问题:

    void fun_ptr_refer(int*& test) {
    	int* temp = new int[10];
    	test = temp;
    }
    
    fun_ptr_refer(var_ptr);
    
    //结果,var_ptr的值发生改变,其存储的地址变为了新创建的temp所申请的地址
  • 相关阅读:
    跨浏览器的事件对象(EventUtil)
    原型 Object.create
    DC大牛的function扩展
    事件代理 proxy
    错误处理程序
    JQuery 插件
    关于ClownFish的问题
    C#拾遗
    Jquery技巧
    防盗链
  • 原文地址:https://www.cnblogs.com/zhanghad/p/12870770.html
Copyright © 2011-2022 走看看