• C++面试秘笈笔记


    c++程序基础

    1.sizeof(str)数组中要保留结束符(需+1),数组变量和指针一样 在win32下为4个字节

    虚函数指针表占4个字节 static成员变量属于类域 不算入对象为0,对齐原则(不同类型之间 且默认为4) ,空类为1 对于union联合体的大小取决于他所有成员占用空间最大的成员大小

    2.sizeof与strlen区别

    char str[20]="1234567890";

    sizeof(str)=20; strlen(str)=10;

    char* ss="1234567890";

    sizeof(ss)=4 strlen(ss)=10;

    3.为何引入内联函数:替代宏定义来解决程序中函数调用的效率问题

    宏定义缺点:无法对参数进行有效性检测 不可强制转化 如果涉及类和类的访问 则无法实现(inline可以解决这些问题)

    两者区别: 内联函数在编译时展开,宏在预编译时展开

    编译时 内联函数直接镶嵌在目标代码中,,宏简单文本替换

    注意参数的二义性

    4.不宜使用内联函数(以代码膨胀为代价)的情况: 代码较长,函数体内有循环 

    指针和引用

    1. a=10;

       int &rn=a;//rn是a的一个引用

       rn=100;//rn的值改变就是a的改变 则a 也为100

       &a=&rn//此时&为取址符 rn和a占内存中同一存储单元

    2.引用和指针的区别:

    引用必须被初始化,指针不必初始化(未初始化时为野指针,危险)

    引用初始化后不能改变引用对象 而指针可以改变指向对象

    不存在指向空值的引用 但存在指向空值的指针

    测试需要区别:由于引用不会指向空值,引用前则不需要测试它的合法性;而指针则需要(安全性)

    应用的区别:如果指向对象不变,则使用引用,如果有指向NULL或者不同时刻指向对象不同则使用指针

    3.指针赋值

    char a[]="hello world'' ;

    char* p=a;

    *(p+4)+=1;//*(p+4)指向o,+1后为p

    4.指针的加减操作

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

    int *ptr=(int*)(&a+1);//&a是对象(数组)的地址,此时为a[5]的地址,已经越界

    *(a+1);//a+1为数组下一个元素的地址

    5.指针比较

    char str1[]="abc";

    char str2[]="abc";

    char *str3="abc";

    const char* str4="abc";

    cout<<"str1==str2"<<endl;//输出为0,str1,str2在栈中分配,但位置不同

    cout<<"str3==str4"<<endl;//输出为1,"abc"放在数据区,这两个指针指向同一个内存位置

    6.指针常量与常量指针区别

    int const *p1 = &b;//const 在前,定义为常量指针  

    int *const p2 = &c;//*在前,定义为指针常量   

    常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。   

        p1 = &a是正确的,但 *p1 = a是错误的。
    指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
        p2= &a是错误的,而*p2 = a 是正确的。

    7.类的非静态成员函数才有this指针

    8.指针数组与数组指针区别

    指针数组:一个数组里存放的是同一类型的指针 

    int* a[10];//占用40位字节

    数组指针:一个指向一维或多维数组的指针

    int* b=new int[10];//需要delete[]防止内存泄漏

    9.野指针

    野指针成因:(1)指针变量为初始化 (2) p被free或者delete后没有置为NULL

    10.malloc与free是C库函数,new与delete是C++运算符,都用于申请动态内存和释放内存

    对类而言,malloc不能调用析构函数和构造函数,但new可以

    11.内存的分配方式

    (1)从静态存储区分配:全局变量,常量

    (2)在栈上创建:局部变量

    (3)从堆上分配:(动态分配内存)malloc new申请

     字符串

    1. 使用库函数将数字转化为字符串

    itoa(num_int,str_int,10);//把整数转化为str,为十进制的转化

    gcvt(num_double,8,str_double);//把浮点型转化为str,8表示精确位数

    2.位运算:

    左移操作<<相当于乘2,

    右移操作<<相当于除以2

    x|=y; 等价于x=x|y; 为位运算里面的或

    x&=~y 等价于 x=x&(~y); 先对y取反 再和x做与运算

    3.#define 中UL(无符号长整型)放在最尾,

    不能以分号结束

    4.关键字static的作用是什么

    (1)在函数体内,静态变量在被调用过程中保持不变

    (2)在模块内(函数体外),可以被模块内所有函数访问,为本地的全局变量

    5.volatile含义:优化器在用到这个变量时必须每次小心重新读取这个变量的值,而不是使用寄存器中的备份

    C++面向对象

    1.C/C++最大区别:

    C是面向过程的编程语言,它以过程为中心,以算法为驱动;

    C++时面向对象的,即使用以对象为中心,以消息为驱动的编程方式.

    2.class和strcut区别:
    (1)C语言中struct只是作为一种复杂数据类型的定义,不是面向对象

    (2)class默认是private,struct默认为public,且class还可用于表示模板类型

     

  • 相关阅读:
    sqlISNULL函数(转载)
    sql数据导入导出(转载)
    sqlbcp
    SQL连接方式(左连接、右连接、全连接)转载
    陶哲轩实分析 习题 7.2.6 (嵌套级数)
    陶哲轩实分析 命题7.2.5 证明
    陶哲轩实分析 定义 7.2.1(形式无限级数) 的一点注记
    陶哲轩实分析 推论 7.3.2 (比较判别法) 证明
    陶哲轩实分析 习题 7.2.6 (嵌套级数)
    陶哲轩实分析 命题 7.2.14 (极限算律) 证明
  • 原文地址:https://www.cnblogs.com/zhaodun/p/7203082.html
Copyright © 2020-2023  润新知