0%

牛客网每日一练

  1. (判断题)指针就是地址,因此一个变量的指针就是该变量的地址。
    答案:错误;解释:指针是个变量,指针的值是个地址,地址是个常量。

  2. char* s=”AAA”;
    s[0]=’B’; //错误,初始化指针时所创建的字符串常量被定义为只读,修改违法

  3. char ch;int i;float f;double d;
    表达式:ch/i+(f*d-i)的结果类型为double

  4. 1
    2
    3
    4
    5
    6
    7
    8
    int main()
    {
    int a = 5, b = 0;
    int c = MAX(++a, b);
    int d = MAX(++a, b + 10);
    printf("%d %d %d %d\n", a, b, c, d);
    return 0;
    }

    Output: 8 0 7 10
    解释:注意define,第一次调用MAX时,++a先执行了一次,此时a为6,由于满足宏定义中(a)>(b)的条件,所以执行a,这个a就对应++a,所以a又自增了一次,变为7,由此得出c为7。 第二个MAX时a又自增了一次,此时为8,由于不满足条件,所以执行的是宏定义中的b,没有执行++a,所以a最终为8

  5. 关于fseek() 参考:C库函数 - fseek()

  6. 转义字符分三种,一般转义字符,八进制转义字符和十六进制转义字符

    一般转义字符,如‘\b’,由两个字符表示,其实代表一个字符,这个代表退格字符

    八进制转义字符,如‘\007’,三位数字是八进制的,ASCII码为7的表示响铃

    十六进制转义字符,如’\xfe’,同样后面数字是所表示意思的Ascii码的十六进制表示,注意一定要有x,大小写都行

  7. 在C程序中逗号运算符的优先级最低,赋值运算符其次;j++是属于赋值语句;sizeof()属于一元运算符;

  8. C中&&(逻辑与)和&(按位与)

    • 按位与运用二进制进行计算,逻辑与比较符号两边的真假输出逻辑值。
    • 按位与对所有的表达式都要判断,逻辑与运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。
    • 按位与&输出运算结果为不同的数值,逻辑与 && 输出逻辑值true或者 false。
  9. 两个指针变量不可以相加,因为指针变量相加没有意义。

  10. scanf函数不能指定输入精度,可以指定长度,比如%m.nf是不允许的,但是可以%mf(m为整数)。scanf("%7.2f",&a);不合法

  11. 多态类中的虚函数表建立在编译阶段。对类的编译,内存分布不太了解。

  12. const int* p是常量指针,p可以改变,*p不能改变int* const p = &a是指针常量,p不可以改变,*p能改变;记忆方法:const后面是p,p不能改变,const后面是*p,*p不能改变;还有一种const int* const p = &a,p和*p都不能改变。

  13. C++程序执行时,内存划分4个区域。不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。代码区和全局区是在程序运行前划分,堆栈是在程序运行后划分。

    • 代码区:存放函数体和二进制代码,由操作系统负责管理(共享、只读)
    • 全局区:存放全局变量和静态变量以及字符串,全局常量(程序结束后,由系统自动回收)
    • 栈区:由编译器自动分配释放,存放函数的参数值,局部变量,局部常量等
    • 堆区:由程序员分配释放,若程序员不释放,程序结束时,由系统自动回收
  14. C++用new关键字请求内存,用delete释放内存,参考:C++ 动态内存

  15. C没有引用,C++引用变量是一个别名,参考:C++引用;使用引用传参;使用引用作为函数返回值引用的本质是指针常量;

  16. 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝析构时重复释放堆带来的问题

  17. 类成员中有其他类对象,构造时先构造成员中的类对象,再构造自身;析构时相反。

  18. 静态成员变量:所有对象共享同一份数据;在编译阶段分配内存;类内声明,类外初始化;静态成员函数:所有对象共享同一个函数;静态成员函数只能访问静态成员变量;

  19. 1
    2
    3
    4
    5
    ostream& operator<<(ostream& cout, Class &c)
    { // c++重载<<运算符
    cout << c.m_A; // 打印成员变量
    return cout; // 链式编程
    }