zoukankan      html  css  js  c++  java
  • C++ 补遗

    C++通过引用传递数组

    数组形参可以声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。

    在这种情况下,数组大小成为形参和实参类型的一部分(实参长度与形参长度不同时,编译报错)。

    void printValue(int (&a)[5]){...}

    int main(){ 

    int i=0; 

    int j[2]={0,1}; 

    int k[5]={0,1,2,3,4}; 

    printValue(i);//编译报错

    printValue(j); //编译报错

    printValue(k); //编译OK 

    return 0; 

    }

    C++多维数组的传递

    C++中没有多维数组,多维数组实际是数组的数组。传参时,形参除了第一维以外的所有维的长度都是元素类型的一部分,必须明确指定。

    void printValue(int (*a)[5], int row_size) {...}

    int (*a)[5]:表示a是指向长度为5的整型数组的指针。

    括号是必须的,因为:
    int (*a)[5]:表示a是指向长度为5的整型数组的指针。

    int *a[5]:表示a是长度为5的数组,每个元素都是int*类型(a是指针的数组)。

    C++指向函数的指针

    函数指针指向一个函数,函数指针也有特定的类型,这个类型由函数的返回值类型和形参表确定,与函数名无关。

    bool (*pf)(const string &, const string &);

    这个语句将pf声明为一个指向函数的指针,它所指向的函数带有两个const string &类型的参数,返回值为bool类型。

    typedef bool (*cmpFunc)(const string &, const string &);

    该语句表示cmpFunc是一种指向函数的指针类型的名字(!类型名)。

    cmpFunc f1 = my_func;

    函数指针只能用同类型的函数或函数指针、或0值敞亮表达式来初始化或赋值。

    返回指向函数的指针

    函数可以返回一个函数指针。

    double (*ff(int))(char*,long);

    ff是一个函数,ff的参数是int类型,ff的返回值是一个函数指针,这个函数指针类型(形参表为char*,long,返回值类型为double)如下:

    double (*)(char*,long);

    在使用函数指针时,可以通过函数指针或者接引用的函数指针调用函数。

    例如:

    pf(“aa”,”bb”); 

    (*pf)(“aa”,”bb”);

    函数指针作为形参时,可以是函数指针。

    typedef bool (*cmpFunc)(const string &, const string &); 

    void f1(cmpFunc); //OK

  • 相关阅读:
    KVM虚拟化学习笔记系列文章列表(转)
    centos 6.5安装docker报错(查看报错详细信息--推荐)
    利用JMX统计远程JAVA进程的CPU和Memory---jVM managerment API
    OpenJDK和JDK区别
    docker sshd image problem, session required pam_loginuid.so, cann't login
    ssh-keygen
    优秀的软件测试人员必需具备的素质
    java基础篇---I/O技术
    jstl long类型数据转换为日期格式
    apache-hadoop-1.2.1、hbase、hive、mahout、nutch、solr安装教程
  • 原文地址:https://www.cnblogs.com/apprentice89/p/3157441.html
Copyright © 2011-2022 走看看