面试题目--C/C++程序基础

1,域操作符::

#include 
int value = 0;
void printvalue()
{
    printf("value = %d \n", value);
};

int main()
{
    int value = 0;
    value = 1;
    printf("value = %d \n", value);

    ::value = 2;
    printvalue();
    
    return 0;
}

若上述程序保存为 .c 的文件,则会出现语法错误,在 C 中不支持域操作符::

若上述程序保存为的的的.cpp的文件,在主函数中的第三行的printf()的输出是局部变量值的值,即如果局部变量与全局变量同名,局部变量引用优先,此时想调用全局变量,则需要使用域操作符::来直接操作全局变量。


2,i++ 与 ++i 的区别

1)运算差异

i++:先进行其他运算或操作,再进行 i 自身的加1

++i:先进行 i 自身的加1,再进行其他运算或操作

2)效率差异

对于内建数据类型(整数,浮点等),两者没有太大差异

对于自定义数据类型(主要指类),因为 ++i 可以返回对象的引用,而 i++ 必须返回对象的值,返回值时会产生较大的复制开销,引起效率降低。对自定义数据类型使用 i++ 时,要对其进行运算符重载,在运算符重载函数中总要先创建一个临时对象,以保存当前值。


3,有符号变量与无符号变量

当表达式中存在有符号类型和无符号类型时,所有的操作数都自动转换成无符号类型。


4,C++ 与 C 的区别

C 是一种结构化语言,重点在于算法和数据结构,C 是 C++ 的子集。

C 程序的设计考虑的是如何通过一个过程,对输入进行运算处理,得到输出。

对于 C++,首先要考虑的是如何构造一个对象模型,让该模型能够配合对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

简而言之,C 是面向过程化的,C++ 不是完全面向对象化的,也能写出与 C 一样的过程化的程序的。Java 是真正面向对象化的。


5,头文件引用中<>与 ""的区别

尖括号<>表明该文件是一个工程或标准头文件,查找过程会首先检查预定义的目录。

双引号""表明该文件是用户提供的头文件,查找该文件时将从当前文件目录(或文件名指定的其他目录)中寻找文件


6、atexit()函数的使用

该函数的参数是一个函数指针。

可以用atexit()来注册 程序正常终止时要被调用的函数。

你可能感兴趣的:(C/C++)