关于C/C++一些面试/笔试题的反思(超基础的知识点)

简介: <p><br></p> <p>1、用变量a给出下面的定义 </p> <p><br></p> <p>a) 、一个整型数; </p> <p></p> <pre name="code" class="html">int a;</pre> <p><br></p> <p>b)、一个指向整型数的指针; </p> <p></p> <pre name="code" class="html


1、用变量a给出下面的定义 


a) 、一个整型数; 

int a;


b)、一个指向整型数的指针; 

int *a;

c)、一个指向指针的指针,它指向的指针是指向一个整型数; 

int **a;

d)一个有10个整型的数组; 

int a[10];

e)、一个有10个指针的数组,该指针是指向一个整型数; 

int *a[10];


f)一个指向有10个整型数数组的指针; 

int (*a)[10];


g)、一个指向函数的指针,该函数有一个整型参数并返回一个整型数; 

int (*a)(int);


h)、一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。

int (*a[10])(int);


2、以下为32为windows下的c++程序,请计算: 


char str[]="hello";
char *p=str;


请计算: 

sizeof(str)
sizeof(p)
strlen(str)
strlen(p)

sizeof(str)=6 ;

sizeof(p)=4 ;

strlen(str)=strlen(p)=5;



3、内存问题


(1)、内存分配方式及其区别?


一是从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如,全局变量和static变量。

二是从栈上创建。栈区由编译器自动分配释放,存放函数的参数值、局部变量的值等。

三是从堆上动态分配。一般由程序员分配释放,若程序员不释放,很有可能出错,程序会在结束时由OS回收。


(2)、new/delete与malloc/free有何区别与联系?


相同点:两者都是在堆上进行动态的内存操作。

不同点:malloc函数需要指定内存分配的字节数并且不能初始化对象,free也不会调用对象的析构函数;但是new会自动调用对象的构造函数且detele也会自动调用对象的析构函数。


(3)、堆栈溢出的原因有可能是什么?


可能的原因是:一是循环的递归调用导致的,若使用大数据结构的局部变量,也可能导致堆栈溢出;二是没有回收垃圾资源会导致内存泄露最后耗尽系统内存。



4、一些重要的关键字


(1)、static的用途


一是限制变量的作用域;二是设置变量的存储域。

具体如下:

1)、在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变;

2)、在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3)、在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。


(2)、关键字volatile的含义


与大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1)、并行设备的硬件寄存器(如:状态寄存器);

2)、一个中断服务子程序中会访问到的非自动变量(Non-automatic variables);

3)、多线程应用中被几个任务共享的变量。


(3)、const


const意味着"只读"(非标准但正确的答案)。

下面的声明都是什么意思?

const int a;
int const a;
const int *a;
int * const a;
int const * a const;

前两个的作用是一样,a是一个常整型数。

第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。

第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。




目录
相关文章
|
12天前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
3月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
55 0
|
14天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
27 4
|
12天前
|
存储 移动开发 前端开发
「offer来了」面试中必考的15个html知识点
该文章汇总了前端面试中常见的15个HTML知识点,涵盖了从HTML文档的规范书写、doctype声明的作用到新兴的HTML5标签应用及移动端viewport设置等内容,旨在帮助求职者更好地准备相关技术面试。
「offer来了」面试中必考的15个html知识点
|
12天前
|
Web App开发 前端开发 JavaScript
「offer来了」1张思维导图,6大知识板块,带你梳理面试中CSS的知识点!
该文章通过一张思维导图和六大知识板块系统梳理了前端面试中涉及的CSS核心知识点,包括CSS框架、基础样式问题、布局技巧、动画处理、浏览器兼容性及性能优化等方面的内容。
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android 消息处理机制估计都被写烂了,但是依然还是要写一下,因为Android应用程序是通过消息来驱动的,Android某种意义上也可以说成是一个以消息驱动的系统,UI、事件、生命周期都和消息处理机制息息相关,并且消息处理机制在整个Android知识体系中也是尤其重要,在太多的源码分析的文章讲得比较繁琐,很多人对整个消息处理机制依然是懵懵懂懂,这篇文章通过一些问答的模式结合Android主线程(UI线程)的工作原理来讲解,源码注释很全,还有结合流程图,如果你对Android 消息处理机制还不是很理解,我相信只要你静下心来耐心的看,肯定会有不少的收获的。
133 3
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
2月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
120 9
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
View的绘制和事件处理是两个重要的主题,上一篇《图解 Android事件分发机制》已经把事件的分发机制讲得比较详细了,这一篇是针对View的绘制,View的绘制如果你有所了解,基本分为measure、layout、draw 过程,其中比较难理解就是measure过程,所以本篇文章大幅笔地分析measure过程,相对讲得比较详细,文章也比较长,如果你对View的绘制还不是很懂,对measure过程掌握得不是很深刻,那么耐心点,看完这篇文章,相信你会有所收获的。
85 2