C++一些基础知识

本文详细解析了C++中指针操作符的区别,如(*p)++与*p++的不同之处,以及变量操作的合法性问题。此外还介绍了不同类型变量与零值比较的最佳实践,并对比了new/delete与malloc/free在内存管理上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*参考《程序员面试笔试宝典 第二版》机械工业出版社 P54*/


(*p)++  *p++ 之间的区别

第一个是 先取出值,再把值++,p没变,还是指向原来的空间。

第二个是 先取出值,再把p++;


<pre name="code" class="cpp"><span style="font-size:14px;">	int a=2;
	int *p=&a;
	cout<<(*p)++<<endl;
	cout<<*p<<endl;
	cout<<a<<endl;</span>


结果是:

233

<span style="font-size:14px;">	int a=2;
	int *p=&a;
	cout<<*p++<<endl;
	cout<<*p<<endl;
	cout<<a<<endl;</span>
结果是:

2
-858993460
2


================(2)=================================================

若a是变量,则 (a++)+=a;这句是非法的。

因为 a++不能当做左值(取a的地址,把它的值装入寄存器,然后在内存中对a进行++),

而 ++a可以(表示取a的地址,对它的内容进行+1操作,然后把值放入寄存器)。


i++=5 非法  i++的运算结果并不是i这个变量的引用,而是一个临时变量,编译器不允许对一个临时变量重新赋值,上面的表达式会引起编译错误。

++i=5;合法

==================(3)===============================================

如何进行float、bool、int、指针变量与“零值”的比较

(1)int

推荐写法:

if(n==0)

if(n!=0)

(2)float

const float P=0.00001;

if(x>=-P&&X<=P)

错误的写法:

if(x==0.0)或者if(x!=0.0)

(3)bool类型

if(flag)

if(!flag)

(4)指针类型

if(P==NULL)

if(P!=NULL)

==================(4)===============================================

new/delete   malloc/free(需要头文件<stdlib.h>)
二者都位于 堆中,操作系统不会回收,需要手动delete\free 
具体差别:
1)new 可以自动计算需要分配的内存,而malloc需要手工计算字节数。
     int *p=new int [2]; int *q=malloc(2*sizeof(int));
2)new 与delete 直接带具体类型的指针,malloc与free返回void类型的指针。
3)new是类型安全的,而malloc不是。
     int *a=new float[2];会报错,而 int *a=malloc(2*sizeof(float));编译器无法报错
4)new一般有两步,分别是new操作和构造。
5)new将调用构造函数,而malloc不能,delete将调用析构函数,而free不能。
6)new/delete(不需要头文件<stdlib.h>)
      malloc/free(需要头文件<stdlib.h>)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值