1-const.cpp
#include <iostream>
using namespace std;
void f()
{
#define b 100
const int c = 200;
}
int main()
{
const int a = 1; //C++中,const修饰的是常量,存放在符号表中
//a++;
int *p = (int *)&a; //对const修饰的常量取地址,编译器分配了一个整形的长度,并且把数字1填写到对应的内存
*p = 2;
cout << a << endl; //因为a是常量,所以用1替换a
cout << b << endl; //作用域不同
//cout << c << endl;
return 0;
}
2-引用.cpp
#include <iostream>
using namespace std;
void swap(int &x, int &y) //int &x = m;
{
y = x + y;
x = y - x;
y = y - x;
}
int main()
{
int a = 100;
int &b = a; //定义引用b,初始化为a b是a的别名
b = 200; //a = 200
cout << a << endl;
int m = 1, n = 2;
swap(m, n);
cout << "m = " << m << " n = " << n << endl;
return 0;
}
3-引用的本质.cpp
#include <iostream>
using namespace std;
struct Test
{
int &a;
int &b;
char &c; //引用的本质是常指针
};
int main()
{
int a = 1;
char ch = 'x';
int &pa = a; //引用定义的时候必须要初始化
char &pc = ch; //等价于 char *const pc = &ch;
//int &f;
cout << sizeof(pa) << endl; //引用的长度就是其引用的对象的长度
cout << sizeof(pc) << endl;
cout << sizeof(struct Test) << endl; //分析正常语法现象的时候,当做别名来分析,
//但是分析奇怪的语法现象,需要考虑引用的实现
return 0;
}
4-函数返回引用.cpp
#include <iostream>
using namespace std;
int g = 100;
int &f1()
{
int a = 1;
//return a; //不要返回局部变量的引用
return g;
}
int f2()
{
return g;
}
int main()
{
int &b = f1();
f1() = 1;
//f2() = 1; //等价于100 = 1;
return 0;
}
5-指针引用.cpp
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
void Init(char *&s) //引用指针
{
s = (char *)malloc(sizeof(char) * 100);
}
int main()
{
char *s = NULL;
Init(s);
strcpy(s, "hello");
return 0;
}
6-常引用.cpp
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int &pa = a; //可以用变量初始化普通引用
//int &pb = 1; //不可以用常量初始化普通引用
const int &pc = a; //常引用 变量可以初始化常引用
//pc++; //不能通过pc来修改对应内存的值
a++; //可以通过其他方式修改
cout << pc << endl;
const int &pd = 1; //可以使用常量初始化常引用
int *p = (int *)&pd;
(*p)++;
cout << pd << endl;
return 0;
}