C++核心编程学习指南
内存分区
- 程序运行前
- 代码区:共享、只读;
- 全局区:存放全局变量、静态变量、常量(字符串常量、const修饰的全局常量),数据在程序结束后由操作系统释放。
- 程序运行后
- 栈区:存放局部变量,注意:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
- 堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收。
开辟内存:new关键字,如:
int* a = new int(10);
int* arr = new int[10];//开辟数组
释放内存:delete关键字
delete p;
delete[] arr;//释放数组
引用
引用就是给变量起小名,但其本质是在c++内部实现是一个指针常量。
- 引用做函数参数
函数传参时,可以利用引用的技术让形参修饰实参,简化指针修改实参。值传递、地址传递、引用传递比较:
- 值传递
值传递中形参变化而实参不变。
void mySwap01(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
mySwap01(a, b);
cout << "a:" << a << " b:" << b << endl;
system("pause");
return 0;
}
- 地址传递
地址传递形参、实参均改变。
void mySwap02(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 10;
int b = 20;
mySwap02(&a, &b);
cout << "a:" << a << " b:" << b << endl;
system("pause");
return 0;
}
- 引用传递
引用传递形参、实参均改变,效果和地址传递一样,好理解。
void mySwap03(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
mySwap03(a, b);
cout << "a:" << a << " b:" << b << endl;
system("pause");
return 0;
}