zoukankan      html  css  js  c++  java
  • 2017.2.16

    一.面试题:

       1.int(*z(int x,int (*y)(int)))(int)

          令Y=int (*y)(int)

          Y z(int x,Y)

       2.int( *&  z( int (*&y) (int,int)))(int,int)

           令Y1=int(*&  )(int,int)

           Y1 z(Y1)

    二.引用高级

       1. 二维数组的引用

    1 int a[2][5]={0}
    2 int (&ra)[2][5](a);

       2.函数指针的引用(用途等于指向函数指针的指针)

    1 int (*p)(int a,int b)(函数名);
    2 int  (*&rp)(int a,int b)(p);
    3 int (* const &rp)(int a,int b)(p)

       3.引用数组是非法的,使用指针数组。

    1 int a=0,b=1,c=2;
    2 int &p[4]={a,b,c};          //error
    3 int *pp[4]={&a,&b,&c);      //ac

       4.sizeof(引用)

       在64位编译器中,指针是占8个字节的,引用的本质是指针,在类中退化时也是8字节。

                              初始化后,sizeof(x的引用)=sizeof(x)

    //x64编译器
    1
    struct node1 2 { 3 char &a; 4 short &b; 5 }; 6 7 int main() 8 { 9 double b = 9.0; 10 double &c = b; 11 std::cout << sizeof(c) << std::endl; //8 12 std::cout << sizeof(node1) << std::endl; //16 13 std::cin.get(); 14 }

       5.右值引用

         节约内存拷贝,直接在寄存器修改。

         左值转右值方法: std::move()

       6.常量引用:不能用常量引用修改。

       7.引用可以给另一个引用初始化。

    三.结构体对齐

      

    两个原则:1.相对于结构体首地址的偏移量必须是自身对齐参数和#pragma pack()的最小值的倍数

                  2.结构体的总长度必须是自身对齐参数和#pragma pack()的最小值的倍数 

    eg1:

    #pragma pack(4) 
    #include<stdio.h>
    #include<iostream>
    
    struct node
    {
        int i;
        double d;
    } q;
    
    int main()
    {
        std::cout<<sizeof(q)<<std::endl;  //q=12   如果#pragma pack(4)不写 ,64位操作系统默认#pragma pack(8),q=16
    }

    eg2:

    #include<stdio.h>
    #include<iostream>
    
    struct node1
    {
        int a;
        char b;
        short c;
    }p;
    
    struct node2
    {
        bool a;
        node1 p;
        double b;
        int c;
    }q;
    
    int main()
    {
        std::cout<<sizeof(p)<<std::endl;//8  内存分布为 4 1(1) 2(2) 
        std::cout<<sizeof(q)<<std::endl;//32 内存分布为 1 (3) 8 (4) 8 4 (4)
    }  //结构体的首地址偏移量是结构体中最大偏移量的倍数就可以了
  • 相关阅读:
    02---控制移动底座8
    02---控制移动底座7
    02---控制移动底座6
    02---控制移动底座5
    第四章输入/输出(I/O)4.2PCL中I/O模块及类介绍
    第四章输入/输出(I/O)4.1I/O涉及的设备及相关概念简介
    1.6 opencv视频操作基础
    1.5快速上手OpenCV图像处理
    02---控制移动底座4
    函数cvtColor
  • 原文地址:https://www.cnblogs.com/acliang/p/6405426.html
Copyright © 2011-2022 走看看