#include<iostream>
using namespace std;
void main()
{
const int a = 0;
int const b = 1;//一样
const int * c;//const修饰的是指针所指向的内存空间(即值),不能被修改
int* const d = NULL;//const修饰的指针变量不能被修改
const int* const e=NULL;//const修饰的指针变量不能被修改,指针变量所指向的内存空间(值)也不能被修改
}
struct Teacher
{
char name[64];
int age;
};
//const修饰的是结构体指针所指向的内存空间(所以值不能修改)
int operatorTeacher01(const Teacher* pT)
{
//pT.age = 22;
pT = NULL;
}
//const修饰的是结构体指针所指向的指针变量(所以变量不能修改)
int operatorTeacher02(Teacher* const pT)
{
pT->age = 22;
//pT = NULL;
}
//都不能被修改
int operatorTeacher03(const Teacher* const pT)
{
//pT->age = 22;
//pT = NULL;
}
总结
结论:
C语言中的const变量
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量
可能分配存储空间,也可能不分配存储空间
分配的两种情况:
当const常量为全局,并且需要在其它文件中使用
当使用&操作符取const常量的地址
不一样的const
#include <iostream>
using namespace std;
int main()
{
int val = 123;
int* p = &val;
//会报错,cool是常量,而左边是个变量,所以要使不报错需要左边加上const
//char* p = "cool";
const char* q = "cool";
char s[] = "hot" ;
//都是变量所以不报错
char *q = s;
return 0;
}
传递参数有两种方式,值传递和引用传递,值传递会拷贝,引用传递是通过传递地址,来减少拷贝,一般都是用左值,但出现临时变量析构时,就要用到右值传递解决
左值引用
#include <iostream>
using namespace std;
int main()
{
int num = 1;
//左值引用两边都是左值,number就是num,同一段内存不同名字
int& number = num;
number = 2;
cout << number << " " << num << endl; //2
num = 3;
cout << number << " " << num << endl; //3
return 0;
}
右值引用
#include <iostream>
void print(int&& right)
{
}
int main()
{
//右值引用,两边都是右值
int&& rigthvalue = 123;
int age = 0;
//错误调用,不能用左值调用
//print(age);
print(123);
return 0;
}
常引用
#include <iostream>
using namespace std;
int main()
{
//可以传普通变量也可以常量
const int& num=1;
int num2 = 2;
const int& num3=num2;
//只能传普通变量
//报错
int num4 = 4;
int& num5 = num4;
return 0;
}