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)
    }  //结构体的首地址偏移量是结构体中最大偏移量的倍数就可以了
  • 相关阅读:
    Linux 分卷压缩
    用 virtualenv 创建隔离的 Python 运行环境
    Ubuntu 16.04 安装 Python3.6
    Python 的全局变量
    Git 使用总结
    开源的许可证GPL、LGPL、BSD、Apache 2.0
    Python Unofficial Package Site
    apt-get update 更新 ubuntu时出现Hash sum mismatch的原因及解决方法
    Keep It Simple & Stupid
    Python IDLE 增加清屏功能
  • 原文地址:https://www.cnblogs.com/acliang/p/6405426.html
Copyright © 2011-2022 走看看