1 栈区
局部变量:{}里面的普通变量
手动申请的内存
3 常量区
存储常量:100 ‘a' "gyiukl"
4 静态全局区
静态变量、全局变量
静态变量(static):局部静态变量、全局静态变量
静态变量默认值为0
全局:全局静态变量 和 全局普通变量
生存周期:
程序开始时分配内存 程序结束时回收内存
作用域:
全局静态变量:当前文件
全局普通变量:当前项目(extern)
局部:局部普通变量 和 局部静态变量
生存周期:
局部静态变量:程序开始时分配内存 程序结束时回收内存
局部普通变量:{}开始时分配内存 {}结束时回收内存
作用域:
当前大括号
静态变量 只定义一次
for (int i = 0; i < 10; i++)
{
static int number = 1;
cout << number << endl;
number++;
}
for (int i = 0; i < 10; i++)
{
int number = 1;
cout << number << endl;
number++;
}
5 代码区
代码
void*指针
1 void*可以表示任意类型的地址
2 不能自增自减(不知道一个单位是多少)
手动申请内存
手动申请 手动释放 手动置空
1 C语言方法
申请:malloc(字节数)
释放:free(地址)
int* p = (int*)malloc(sizeof(int)*10);
p[0] = 9;
p[1] = 4;
cout << p[1] << endl;
free(p);
申请:calloc(单个字节数,个数)
释放:free()
int* p1 = (int*)calloc(sizeof(int),10);
for (int i = 0; i < 10; i++)
p1[i] = i;
for (int i = 0; i < 10; i++)
cout << p1[i] << endl;
2 C++方法
申请:new 类型[个数]
释放:delete 地址;
int* p2 = new int;
*p2 = 7;
cout << *p2 << endl;
delete p2;
int* p3 = new int[10];
for (int i = 0; i < 10; i++)
p3[i] = i;
for (int i = 0; i < 10; i++)
cout << p3[i] << endl;
delete p3;
int** pp = new int*[10];
for (int i = 0; i < 10; i++)
pp[i] = new int[10];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
pp[i][j] = i * 10 + j;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
cout << pp[i][j] << " ";
cout << endl;
}
使用指针的注意事项
1 指针要有指向 没有指向的置空
2 申请的内存要释放
3 释放的内存要置空
……
内存泄漏
申请了内存但是没有释放
野指针
释放之后指针没有置空