zoukankan      html  css  js  c++  java
  • 默认参数函数,引用

    一:默认参数函数

    #include <iostream>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    void test(int sum = 0) //函数的定义 
    {
        cout<<"默认参数sum="<<sum<<endl;
    }
    void test1(int c = 0) 
    {
        cout<<"默认参数c="<<c<<endl;
    }
    void test2(int x = 0,int y = 1,int b = 0)
    {
        cout<<"使用默认参数时要从右至左逐次定义"<<endl;
    }
    //void test3(int x = 1,int y,int b = 0) //未从右至左逐次定义 中间有一个没有使用默认参数 
    void test4(int x,float y = 0,int b = 0)
    {
        cout<<"从右至左逐次定义"<<endl;
    }
    int main(int argc, char** argv) 
    {
    
        void test1(int c = 0); 
        test1();
        test(); 
        test2();
        test4(4); //在调用函数时,传入的参数是从左至右匹配的,其中未指定默认值的参数必须传入实际值。 
        return 0;
    }

    二:引用基本概念:

    (1):语法格式:类型标识符&引用名=目标变量名。

    (2):类型标识符是指目标变量的类型。

    (3):声明引用时,必须同时对其进行初始化,即给出引用的具体变量。

    (4): 声明引用完毕后,相当于目标变量有两个名称,即该目标原名称和引用名。

    (5):声明一个引用不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,所以,系统并不给引用分配存储单元.

     1 #include <iostream>
     2 using namespace std;
     3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
     4 void test(int &r)
     5 {
     6     cout<<"通过修改引用作为参数的形参可以修改到实参"<<endl;
     7     r = 10;
     8  } 
     9  
    10 int main(int argc, char** argv) 
    11 {
    12     int f = 8;
    13     int &r = f; //引用一个变量 
    14     cout<<"r="<<"f="<<r<<"="<<f<<endl;
    15     
    16     r = 2; //记住引用是不具备内存空间的,so此时修改的是f;
    17     cout<<f<<endl; //2
    18      
    19     int c = 0;
    20     r = c;
    21     cout<<"引用c后的r="<<r<<"f="<<f<<endl; //输出:引用c后的r=0f=0。
    22     /*【注意】:不管你怎么使用记住他只是被引用的变量的一个别名,他什么都没有,但是通过他可以间接的来修改他所引用的变量, 
    23     不能与指针的定义混淆. 
    24     */ 
    25     
    26 //引用作为函数的参数.
    27      int s = 100;
    28      test(s);
    29      cout<<"修改引用形参来修改被引用的实参s"<<s<<endl;//s = 10;
    30  
    31     return 0;
    32 }

    三:用指针来做形式参数。

     1 #include <iostream>
     2 using namespace std;
     3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
     4 
     5 int test(int *p) //p是指向实参的指针变量,是具备内存空间的。 
     6  {
     7      *p = 10;
     8      return 0;
     9   } 
    10 
    11 int test1(int (*c)[10] )
    12 {
    13     cout<<*c<<endl;
    14 }
    15 int main(int argc, char** argv) 
    16 {
    17     int f = 100;
    18     cout<<"输出实参未改变前的地址。判断修改前和修改后地址是否相同,"<<&f<<endl; //输出实参未改变前的地址。判断修改前和修改后地址是否相同,0x6ffe1c
    19     test(&f); //传入的是f的地址 
    20     cout<<f<<endl; //10
    21     cout<<"输出改变值后的地址"<<&f<<endl; //输出改变值后的地址0x6ffe1c
    22 
    23 
    24 //我们知道函数是不能返回数组的,所以我们通过指针来实现返回数组
    25      int s[10] = {1,2,3,4,5,6,7,8,9,10};
    26      int *c = test1(&s);
    27      cout<<*c<<endl;
    28     return 0;
    29 }
  • 相关阅读:
    Java学习笔记-Lambda表达式
    Java学习笔记-枚举类
    Java学习笔记-枚举类
    Java学习笔记-包装类
    js 递归 汉诺塔的例子
    js 用 hasOwnProperty() 判定属性是来自该对象成员,还是原型链
    正则,js函数math()提取混乱字符串中多个字符串内容
    封装好的cookie的三个常用函数 cookie的添加、删除、提取操作函数
    解决ie6下png背景不能透明bug
    ie6下标签定义的高失效,显示的高不受设定的height值影响
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/12386854.html
Copyright © 2011-2022 走看看