C++ 常见面试问题
会有那么一天oc
人生不止编程,还有美妙的生活和美好的人。心中装着美好,随处是风景 !
展开
-
一定要知道的 typedef 和 #define 的区别 精简
例如:typedef char * String_t;#define String_d char *typedef char *String_t 定义了一个新的类型别名,有类型检查#define String_d char * 只是做了个简单的替换,无类型检查前者在编译的时候处理,后者在预编译(预处理)的时候处理同时定义多个变量的时候有区别,主要原创 2018-02-01 15:55:43 · 362 阅读 · 0 评论 -
什么是预编译?何时需要预编译?
什么是预编译:预编译又称为预处理 , 是做些代码文本的替换工作。处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。C 编译系统在对程原创 2018-01-30 16:40:44 · 2141 阅读 · 0 评论 -
关键字 const 含义、作用,与#define相比的优点
const意味着”只读”本质:const在谁后面谁就不可以修改,const在最前面则将其后移一位,二者等效。下面的声明都是什么意思?const int a;int const a;//前两个的作用是一样,a是一个常整型数。const int *a;//意味着a是一个指向常整型数的指针(也就是,整型数是不可 修改的,但指针可以)。int * const a;/原创 2018-01-30 16:40:22 · 452 阅读 · 0 评论 -
简述数组与指针的区别
1.数组是一连续的记忆体区块,必须要先决定配置容量和存放的资料型态。当数组作为函数的参数进行传递时,数组就自动退化为通指针类型,数组名可作为指针常量。2.指针是指针变量的简称,这个变量存放的地址值,是可以改变的;3.int a[10]; //系统实实在在分配了10*4个字节的连续内存单元int* p=a;//也可以写成 int* p = &a[0];p指向数组a[10]的首地址原创 2018-01-30 16:39:49 · 505 阅读 · 0 评论 -
系统调用与库函数的区别
库函数系统调用1平台移植性好,不同环境使用相似依赖于内核,不保证移植,各个操作系统使用不同2调用函数库调用内核服务3与用户程序相联系,一个普通功能函数的调用是操作系统的一个入口4用户地址空间运行在内核地址空间运行原创 2018-01-30 16:39:05 · 350 阅读 · 0 评论 -
内存分配及堆与栈的区别
1.内存分配方式内存分配方式有三种: 1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2.从栈上分配。函数内的局部变量的存储单元,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3.从堆上分配,亦称动态内原创 2018-01-30 16:38:22 · 306 阅读 · 0 评论 -
C语言中常见的内存错误与解决方法(含野指针概念)
常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策。类型 1:内存未分配成功,却使用了它。方 法:在使用之前检查指针是否为NULL。 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查。 2)当使用malloc或new来申请内存时,应该用if(p原创 2018-01-30 16:35:51 · 396 阅读 · 0 评论 -
sizeof 和 strlen 的区别
1.sizeof是操作符,strlen是函数。2.在计算字符串数组的长度上有区别,例如:char str[20] = "0123456789";int a = strlen(str);//a=10;int b = sizeof(str);//而b=20;a 计算的是以0x00结束的字符串的长度(不包括0x00结束符)这里结果为10;b 计算的则是分配的数组 str[20]原创 2018-01-30 16:34:40 · 288 阅读 · 0 评论 -
关键字static的作用
static关键字至少有下列n个作用:(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数原创 2018-01-23 19:35:43 · 260 阅读 · 0 评论 -
static 全局变量、局部变量、函数与普通全局变量、局部变量、函数区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不原创 2018-01-23 19:57:51 · 544 阅读 · 0 评论 -
程序的内存分配即一个由C/C++编译的程序占用的内存分为以下几个部分
一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。3、全局区(静态区)——全局变量和静态变量存原创 2018-01-23 20:13:24 · 746 阅读 · 0 评论 -
堆和栈的主要区别
1申请方式和回收方式 stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 如p1 = (char *)malloc(10); 在C++中用new运算符 如p2 =原创 2018-01-23 21:03:20 · 291 阅读 · 1 评论 -
在C++程序中调用被 C 编译器编译后的函数库,为什么要加 extern “C”声明?
C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字。与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo , 而C++ 编译器则会产生像_foo_int_int 之类的名字。 如果C++程序要原创 2018-01-30 16:41:36 · 415 阅读 · 0 评论