很多东西长时间没用,写点东西加强下。
0.数组名不是指针
谭浩强的书上说过数组名是数组首元素地址,而指针的值是地址,所以说数组名不是指针。
指针又叫指针变量,指针的值是地址,指针可以修改从而指向其他空间。
而C++中的数组名是不可修改的右值,它就不是个指针,这点记住了!!!
参考:https://www.cnblogs.com/xiehongfeng100/p/4684825.html
1.宏替换
#include "iostream"
#define Max( a,b ) (a)>(b)?(a):(b)
using namespace std;
int main() {
//6>5?6:5+2
int res = Max(6, 5)+2;
cout << res <<" "<<(Max(6,5) )<<" "<< (Max(6, 5) ) + 2<< endl;
}
res最后为8,因为define就是简单的替换,所以res = 6>5?6:5+2.
2.参数缺省
void foo( int a, int b=1, int c=2 ){
cout<<a<<" "<<b<<" "<<c<<endl;
}
缺省参数就是声明或者定义函数时为形参指定一个默认值,
对于缺省参数,必须放在函数参数列表的最后面,因为函数传参是从右向左的。
缺省参数不能在函数声明与函数定义中同时出现。
缺省值必须是常量或者全局变量。
参考:https://blog.youkuaiyun.com/zym1348010959/article/details/80657736
函数传参是从右向左的:
https://blog.youkuaiyun.com/weiyayunerfendou/article/details/72805766
https://blog.youkuaiyun.com/zDavid_2018/article/details/82634525
3.双端队列
deque与vector不同,vector把把所有数据保存在一块连续的空间,而deque采用多个连续存储块,并且在一个映射结构中保存这些块及其顺序的跟踪。向deque两端添加或删除元素的开销很小。
4.TRUE,FALSE与true, false, BOOL与bool
FALSE/TRUE是int类型,而false/true是bool类型
BOOL为int型, bool为布尔型
https://www.cnblogs.com/shikamaru/p/5809368.html
5. malloc 与 new返回对象
new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。