C和C++区别

1.const *   和引用&

const

常量   常变量

常变量就是不能做左值,其他都和变量性质一样的。

常量在编译时候所有用到常量的地方都替换成常量的初始值。

1.C和C++第一个区别:

 

 

我们什么时候要加常引用呢?

很明显就是在引用我们常量的时候需要我们常引用。

 

函数返回值

内置类型产生的临时量都是常量    不可更改     通过eax 寄存器

自定义类型产生的临时量是变量    可以修改

 

<= 4       eax 寄存器带回

>4      <=8    eax     edx两个寄存器带回

>  8      产生临时量

int GetInt()
{
    int data = 10;
    return data;

    // mov eax,dword ptr[ebp-4];
    //通过寄存器带回
}

int main()
{
     int &a = GetInt();  //不能直接引用,因为右边不能取地址
     const int &a = GetInt();    //加了const 是可以的,产生一个零时量
     cosnt int *p = &GetInt();   //这样是产生不了零时量
    //const &  不可寻址的常量
    
     return 0;
}


2.动态内存开辟

malloc  free

new     delete

int main()
{
    int *p = (int *)malloc (sizeof(int));
    int *p = new int(10);

    return 0;
}


 

malloc

作用:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。  

malloc 向系统申请分配指定size字节内存空间,返回void*类型,在强转成自己要的类型。

free

作用:该函数是将之前用malloc 分配的空间还给操作系统,也就是释放这块内存,让它重新得到自由。

注意

1)申请了内存空间,必须检查是否分配成功

2)当不需要这块申请的内存时候,记得释放。释放后记得把它置为NULL。

3)同一块内存不能释放两次。

new运算符

C++中,用new和delete 动态创建和释放数组或单个对象。

动态创建对象时,只需指定其数据类型,而不必为对象命名,new表达式返回值向该创建对象的指针,我们可以通过指针来访问此对象。

初始化问题

int *p = new int();  //初始化为0

int *p = new int ;   //p指向一个没有初始化的int

 

malloc 失败返回NULL

new失败是抛出ad_alloc 异常

 

malloc 是需要我们计算出申请内存的字节数,并且在返回强行转换为实际类型的指针。

new 返回是指定类型的指针,并且可以自动计算所需大小。

 

int *p = (int *) operator new(sizeof(int));
p = new(p) int (10);   //init

//定位new

 

第三个作用域

C作用域

局部作用域

全局作用域

 

C++的作用域

局部作用域

类作用域

名字空间作用域namespace  

这个是为了解决同一变量名在统一作用域下的名字冲突问题。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值