(一)文章来自:C/C++笔试题-主要考察C/C++语言基础概念、算法及编程,附参考答案

(二)基础概念

2. 头文件中的ifndef/define/endif的作用?
 答:防止该头文件被重复引用。

3. #i nclude<file.h>与#i nclude “file.h”的区别?
答:前者编译器从标准库路径开始搜索file.h,而后者编译器从用户的工作路径开始搜索file.h。

4. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern“C”?
答:extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。

5. 面向对象的三个基本特征,并简单叙述之?
答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)
  2)继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。
  3)多态:允许将子类类型的指针赋值给父类类型的指针。

6. 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?
答:从定义上来说:
重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
重写:是指子类重新定义复类虚函数的方法。
从实现原理上来说:
重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。
重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

7. 多态的作用?
答:主要是两个:

1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;

2)接口重用,为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

9. 请说出const与#define 相比,有何优点?
答案:

1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

10.简述数组与指针的区别?
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容上的差别
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 编译器不能发现该错误,运行时错误
(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
char a[] = “hello world”;
char *p = a;
sizeof(a)=12字节(字符11+结束符‘\0’=12个字节)

sizeof(p)=4字节

11.变量的声明和定义有什么区别?
答:

1. 声明变量不分配空间,定义变量要分配空间。

2. 声明主要是告诉编译器,后面的引用都按声明的格式。

3. 定义其实包含了声明的意思,同时要分配内存空间。

12. 解释堆和栈的区别。
答:

堆(heap)——一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。速度比较慢,而且容易产生内存碎片,不过用起来最方便。
栈(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。

13. const的作用是什么?
答:

(1)可以定义const常量
(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

14. 下列哪两个是等同的
int b;
A const  int*   a             =     &b; //指向常量的指针,不能通过指针改变b,但指针的地址可以改变。
B const* int    a             =     &b;// 指针的地址不可以改变,但可以通过指针改变b的值
C const  int*   const  a  =     &b; //指针指向的值,和指针本身的地址都不能改变
D int const*  const  a  =    &b;//与c相同

16. int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 输出是多少?
答:相当于 i=j=4;i=k=8;i=l=16;i=m=32; 故最后i=32;

20. 请写出下面代码在 32 位平台上的运行结果,并说明sizeof的性质:
#include 
#include 
int main(void)
{
char a[30];
char *b = (char *)malloc(20 * sizeof(char));
printf(“%d\n”, sizeof(a));        //30
printf(“%d\n”, sizeof(b));         //4
printf(“%d\n”, sizeof(a[3]));        //1
printf(“%d\n”, sizeof(b+3));        //4
printf(“%d\n”, sizeof(*(b+4)));  //1
return 0 ;
}
答:在32位系统下(如WIN32),指针长度为32位。a是一个有30个元素的字符型数组;b是一个字符串指针;a[3]是字符型;b+3是指针;*(b+4)是字符型。
因此输出: 30、4、1、4、1

21. C++中,关键字struct和class的区别仅仅在于:
struct定义的类的缺省成员为公有的,而class定义的类的缺省成员为私有的;

22. 头文件的作用是什么?
答:

1)通过头文件来调用库功能。

2)头文件能加强类型安全检查。

23. C++函数中值的传递方式有哪几种?
答:C++函数的三种传递方式为:值传递、指针传递和引用传递。

24. 内存的分配方式的分配方式有几种?
答:

1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。
2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

28.函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

30. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
答:while(1){}或者for(;;)

31. 用变量a给出下面的定义
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

32.

1)关键字static的作用是什么?

答:(1)用于全局变量;(2)用于局部变量;(3)用于函数。
2)关键字const有什么含意?

答:表示常量不可以修改的变量。

33. 如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
答案:#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif

35. 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
char * const   p;
char   const * p
const char    *p
上述三个有什么区别?
答:char * const p; //常量指针,p的值不可以修改
char const * p;//指向常量的指针,指向的常量值不可以改
const char *p; //和char const *p

40. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
int a = 5, b = 7, c;
c = a+++b;
答:上面的代码被处理成:c = a++ + b;因此, 这段代码持行后a = 6, b = 7, c = 12。

001_C/C++笔试题_考察C/C++语言基础概念的更多相关文章

  1. 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

    风口之下.猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回想历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i] ...

  2. 003_C/C++笔试题_分享大汇总

    (一)感谢:lhzstudio 01_C++经典面试题全集 50~100道 都附带有参考答案 02_C++开发工程师面试题库 100~150道 03_C++笔试题库之编程.问答题 150~200道 0 ...

  3. 002_C/C++笔试题_简单算法程序

    (一)冒泡排序法 #include <iostream> using namespace std; void bubblesort(int a[], int m); int main(vo ...

  4. Java工程师笔试题整理[校招篇]

    Java工程师笔试题整理[校招篇]     隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...

  5. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

  6. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

  7. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  8. 【Python】【面试必看】Python笔试题

    前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...

  9. 关于面试总结4-python笔试题

    前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出2个笔试题,这些题目一般不难,主要考察基本功. 要是给你一台电脑,在编辑器里面边写边调试,没多 ...

随机推荐

  1. 剑指offer16:输入两个单调递增的链表,合成后的链表满足单调不减规则。

    1 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 2 思路与方法 迭代法:两个链表中较小的头结点作为合并后头结点,之后依次合并两个链表中较小的 ...

  2. php常用扩展有哪些

    bcmath(精确数值处理) bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gettext hash icon ...

  3. 二、python数据类型、字符编码、文件处理

    一. 前言 1. 什么是数据: x = 10,10就是我们要存储的数据 2. 为何数据要分不同的类型 数据是用来表示状态的, 不同的状态就应该用不同类型的数据去表示 3. 数据类型 数字(整型.长整型 ...

  4. .NET Core 3.0 发布单文件可执行程序

    Windows dotnet publish -r win10-x64 /p:PublishSingleFile=true maxOS dotnet publish -r osx-x64 /p:Pub ...

  5. 10 TCP限流技术

    TCP限流是因为让接收方充分接受完消息,保证数据安全,不会丢失 一.窗口机制介绍 发送端和接收端都拥有一个窗口,当发送端发送数据时,落进窗口的数据被发送,当接受端接受数据时,落进接收端窗口的数据将会被 ...

  6. arcgis之gp服务发布

    arcgis之gp服务发布 注意: 1.arcgis服务可以直接通过arcmap来发布,gp服务就是将arcmap中的工具发布为服务,达到线上处理数据的能力 2.以文件为参数时不要以文件直接为参数,可 ...

  7. win 10 睡眠无法唤醒

    近日遇到win10系统睡眠后无法唤醒的问题,于是网上到处搜索解决办法,试了其中几个比如回退 Intel(R) Management Engine Interface 的版本.设置电源的睡眠选项以利用休 ...

  8. 【Day3】4.Xpath语法与案例

    课程目标 1.谷歌浏览器配置Xpath 2.Xpath常用语法 3.Xpath常用案例 1.谷歌浏览器配置Xpath Xpath下载:http://chromecj.com/web-developme ...

  9. scrapy 增量采集

    在做新闻或者其它文章采集到时候,只想采集最新发布的信息,之前采集过得就不要再采集了,从而达到增量采集到需求 scrapy-deltafetch,是一个用于解决爬虫去重问题的第三方插件. scrapy- ...

  10. Docker镜像拉取失败或超时的解决办法:添加国内镜像

    $ docker pull php:7.1-fpm-alpine Error response from daemon: Get https://registry-1.docker.io/v2/: n ...