C++与C的区别  思想上:C++是面向对象的语言,C语言是面向过程的结构化编程语言  语法上:  1)C++具有封装、继承、多态三种特性  2)C++增加了许多类型安全功能,比如强制转换类型  3)C++支持范式编程,比如模板类、函数模板等  C++内存管理(程序进程中的分区)  1) 栈区:由编译器自动分配和释放,存放函数的参数、局部变量、返回值等  2) 堆区:一般由程序员分配和释放(malloc/free、new/delete)  3) 代码段:包括只读存储区和文本区,只读存储区存储字符串常量,文本区存储程序的机器代码  4) 数据段:存储程序中已初始化的全局变量和静态变量  5) BSS段:存储未初始化的全局变量和静态变量  若按内存地址的分配角度:全局静态区、文字常量区、程序代码区、堆区、栈区  内存泄漏分类  1) 堆内存泄漏:通过malloc/new等内存分配,但忘了free或delete  2) 系统资源泄露:主要指程序使用系统分配的资源(Bitmap、handle、SOCKET)但没有使用相应的函数释放掉  3) 没有将基类的析构函数定义为虚函数  关键字static的作用   在C/C++中,关键字static有两种用法:  • 修饰变量:使变量在程序运行期间仅被初始化一次,并且作用域只在定义该变量的源文件内部,即静态局部变量和静态全局变量。  • 修饰函数:将函数的作用域限制在定义该函数的源文件内部,即静态函数。  在C语言中,为什么static变量只初始化一次?   静态变量是存储在全局数据区中的变量,程序运行时会在该区域分配一块固定的内存空间,因此静态变量只需要在程序运行期间初始化一次即可。  静态变量什么时候初始化?   静态变量的初始化是在程序执行之前进行的,即在程序加载到内存时就已经完成了初始化,如果没有赋初值,静态变量会默认初始化为0。  简述static对于工程模块化的作用  使用static关键字定义静态变量或者静态函数,可以限制其作用域只在当前源文件内部,这样就可以避免在其他源文件中重复定义同名变量或函数,从而保证程序的模块化和可移植性。  static修饰局部变量和全局变量会有什么效果  1.修饰局部变量:当用于修饰局部变量时,它会改变局部变量的生命周期和存储位置。  • 生命周期:通常情况下,局部变量的生命周期在函数调用期间。当函数返回时,局部变量会被销毁。但是,当局部变量被声明为时,它的生命周期会延长至整个程序运行期间。这意味着在多次调用函数时,局部变量会保留上次调用时的值。  • 存储位置:通常情况下,局部变量存储在栈上。但是,当局部变量被声明为时,它会被存储在静态存储区(或数据段),而不是栈上。  2.修饰全局变量:当用于修饰全局变量时,它会影响变量的可见性和链接。  • 可见性:全局变量的作用域仅限于定义该变量的源文件。这意味着其他源文件无法直接访问此变量。这有助于将变量的作用域限制在本地,避免命名冲突和不小心修改全局变量的问题。  • 链接:全局变量具有内部链接属性。这意味着在链接过程中,该变量不会与其他源文件中的同名变量发生冲突。  extern作用   extern是一个关键字,用于声明一个变量或函数是在其他源文件中定义的,在本文件中不会被分配内存空间,而是在链接时与其他源文件一起链接生成可执行文件。  extern "C"的作用   extern "C"用于声明一段C语言的代码,可以在C++代码中调用这段代码。C++代码和C语言代码的函数调用方式不同,C++使用函数的符号名称包含参数类型信息,而C语言使用函数的符号名称不包含参数类型信息。使用extern "C"可以将C++代码中函数的符号名称修改为C语言的符号名称,使得C++代码可以调用C语言的函数。  const作用   const是一个关键字,用于声明一个变量为常量,即其值在程序运行期间不可修改。const变量在定义时必须进行初始化,否则编译器会报错。  什么情况下使用const关键字?   当程序中的某个变量的值在程序运行期间不应该被修改时,可以使用const关键字将其声明为常量,从而增加程序的可读性和可维护性。  const与define区别  • const定义的常量是有数据类型的,而define定义的常量只是简单的文本替换,没有数据类型。  • const常量具有作用域,只在定义它的作用域内有效,而define常量没有作用域,可以在文件的任何地方使用。  • const常量在编译时进行类型检查,可以发现一些隐含的错误,而define常量只是简单的文
点赞 3
评论 2
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务