深入了解数组名和指针的区别
数组名是一个常量 而指针是一个变量
int arr[] = {1,2,3,4,5,6};
cout << arr << endl;
用汇编语言理解 lea计算计算机内存地址,并且将地址赋值给eax中 由此可见,数组名的显示了地址
int* p = arr;
cout << *p <<endl
当进行到指针的时候,会先进行一次解引用,先引用p地址所指向的内容放入eax中
常量与变量
在刚刚的数组名和指针的例子显示出常量和变量的区别, 当用常量赋值
int a = 10;
编译器会直接变量赋值
当用变量赋值
int b = a ;
会先解引用变量的值,赋值给eax中,再将eax赋值给b
什么是常量
常量:是不能修改的左值,是用const修饰的变量 特点:在编译时期系统会将定义的常量替换,替换成数值。 (因此在定义常变量的时候需要先进行赋值)
定义常变量的方法
const int * p= &a ;其中第一行第二行表达相同的意思
int const * p= &a ;创建一个整形常量类型的指针(指针所指向的为常量)
int * const p= &a ;创建一个整形指针常量的p(p为常量)
const定义规则,const左右第一个类型为其修饰的类型。
除此之外 const有时候无法重载
int fun (int a );
int fun ( const int a);此时函数不可以发生重载
若const修饰的是指针则可以发生重载
int fun (int * p);
int fun (const int *p);
引用
引用的本质:引用的底层是个指针,在使用到引用的地方,系统会在编译期自动替换成底层指针的解引用。 因此引用的时候需要地址
int fun() return 10;
const int & e = fun();
此时fun返回的是一个临时量,由于临时量具有常属性,因此引用需要加const 这个时候的引用叫常引用
New和Delete
new在c++中申请空间,类似于c语言的malloc
new 类型[个数]
new int[5];
delete在c++中摧毁空间,类似于c语言中的free
delete[]变量名
delete[]arr;
c和c++本质区别
c语言是一个面向过程的语言 c++是一个面向对象的语言//具有封装性
|