7-25

C和C++的区别是什么
C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。
C中函数不能进行重载,C++函数可以重载
C++在C的基础上增添类,C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。

C++中struct(public)和class(private)除了默认访问权限外,别的功能几乎都相同。

关键字static const extern
1.static
1. 静态全局变量:存储在静态存储区,只能够被本文件中的成员访问,未经初始化默认是0
2. 静态局部变量:存储在静态存储区,作用域是局部变量的作用域,但是当离开作用域后,并没有销毁,而是驻留在内存中。只有函数再次被调用时才能再次访问,并且值不改变,未经初始化默认是0
3. 静态函数:函数的声明和定义在默认情况下都是extern(用来说明此变量或函数是在别处定义但是在此处引用的) ,但是静态函数只能够在声明它的文件中引用
4. 类静态成员:用于实现多个对象之间的数据共享,不会破坏影藏的原则,保证了安全性。对多个对象来说,静态成员只存储在一个地方,供所有对象使用。
5. 类静态函数:属于类不属于对象,通过类名访问。静态成员函数不能直接引用非静态成员,如果 静态函数需要使用非静态成员,则需要通过对象引用 <类名>::<函数名>(<参数表>)

2.const
1. 把一个变量申明为只读属性
2.可以使用指针指向这一块内存,通过指针修改
2. const是编译时错误,不是运行时错误
3. C++中const关键字会把一个变量标记为常量

3.extern
1.extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
2.extern "C"的作用是让 C++ 编译器将extern "C"声明的代码当作 C 语言代码处理,可以避免 C++ 因符号修饰导致代码不能和C语言库中的符号进行链接。

sizeof和strlen的区别
1. sizeof是运算符,而strlen是函数;
2. sizeof的用法是sizeof(参数),这个参数可以是数组,指针,类型,对象,甚至是函数,其值在编译的时候就计算好了,而strlen的参数必须是字符型指针(char*),其值必须在函数运行的时候才能计算出来;
3.
sizeof的功能是获得保证能容纳实现的建立的最大对象的字节的大小,而strlen的功能是返回字符串的长度,切记这里的字符串的长度是包括结束符的;
4. 当数组作为参数传递给函数的时候,传的是指针,而不是数组,传递数组的首地址;

指针和引用的区别
1. 指针是一个用于存储地址的变量而引用仅仅是一个别名;
2. 指针的的大小是指针类型的大小,如int*p sizeof§=4,而引用的大小则是被引用对象的大小
3. 指针可以被初始化为NULL,而引用在创建的时候就必须进行初始化
4. 作为参数传递时,指针需要别解引用才能对对象进行操作,而直接对引用进行修改就可以改变被指对象
5. 指针可以有const,但是引用不能
6. 指针可以改变所指向的对象,但是引用一旦初始化就不可以修改
7. 指针可以有多级,但是引用不能
8. 指针和引用使用++运算符的意义不一样【指针++ 指的是地址后移一位,引用++ 则是对象的值+1】
9. 如果动态返回内存分配对象或者内存,必须使用指针

指针数组、数组指针、函数指针
1.指针数组:本质上是存储指针的数组。大小取决于其中每一个指针的大小和个数。
2.数组指针:本质上是指向数组的指针,大小取决于指针类型。
3.函数指针:指向函数地址的指针,定义格式:
(int* p)(int,int)函数返回值类型 (* 指针变量名) (函数参数列表);

C++内存布局C/C++程序编译时内存分为5大存储区
(1)栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等,其操作方法类似数据结构中的栈。
(2)堆区(heap):一般由程序员分配释放,与数据结构中的堆毫无关系,分配方式类似于链表。
(3)全局/静态区(static):全局变量和静态变量的存储是放在一起的,在程序编译时分配。
(4)文字常量区:存放常量字符串。
(5)程序代码区:存放函数体(类的成员函数、全局函数)的二进制代码

C/C++内存分配有三种方式:
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。
栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。
动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏。

如果频繁的申请内存会导致出现很多内存碎片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值