1.const int *p与const * int p的区别:
int main (){
int a =5,b =6;
const int *p1 = &a;//指针p1指向的是const int 类型
//(*p1)++; //error,指针p1指向的是常量,常量值不能修改
int const*p2 = &a;//指针p2指向的也是const int 类型
//(*p2)++; //error,指针p2指向的是常量,常量值不能修改
int *const p3 = &a;//指针p3指向的是int 类型,它本身是const类型
//p3 = &b //ok,指针p3指向的是变量(int型)
}
2.有参宏问题:
1)宏只是简单的替换,替换之后可能会出现优先级的问题,通过将宏的参数用括号括起来可以修复此问题
2)宏的参数使用自增自减运算的时候,会出现问题,使用内联函数可以解决此问题;
上面两者的对比:
const
定义的有类型,define
定义的没有类型;
const
在编译的时候分配内存,define
在编译的时候不分配内存,只是进行替换
const
定义的常变量的作用域范围为该变量的作用域范围,
define
定义的常变量的作用域范围为它的定义点到程序结束,或者用undefine取消
3.new
和delete
的用法
new int ;
开辟一个存放整数的存储空间,返回一个指向该空间的地址(指针)(int *型),
new int (100)
开辟一个存放整数的存储空间,并指定初始值为100,返回一个指向该空间的地址
new int [100]
开辟一个存放100个整型字节大小的空间,并返回一个指向该空间的地址
obj *objects = new obj [100]
创建100个动态对象
delete [] objects
;
int *pbuf = new int [15]
delete [] pbuf
int *pNum = new int ('hello')
分配一个整形空间并初始化
delete pNum
4.在c语言中函数重名就会出现编译错误,而在C++中:
1):函数名可以same
2):参数个数,类型,参数顺序必须不同
void fun (int n1,int n2,int n3,int n4,int n5)
{}
fun(1,2);//如果没有给出后续参数,则上面的n3,n4,n5必须赋予初值(比如说都赋予了0),左边才可以这么写,此时就默认为fun(1,2,0,0,0)