C++记录4
自动存储: 生命周期在代码块,存储在栈,后入先出。
静态存储: 存在于程序的整个周期。
动态存储: 使用new delete 在内存池(堆)存储,不受程序生命周期控制。
内存泄露: 没有及时delete 由于作用域规则包含指针的内存被释放,但内存池中中的变量依然存在,将会导致后面指向该区域的指针无效。
struct year_load
{
int year
}
year_load s1, s2[10], s3
s1.year = 1998
s2[2].year=1999
year_load *ps = &s3
C++记录5
常量必须用常量指针
const float a=3.1
const float *pe = &a
常量值,常量指针,函数中常量参数
int gorp = 10
int chips = 20
const int *pe = &gorp 此处常量锁定的是变量值, 因此*pe=50不被允许, pe = &chips改变地址可以。
int * const pd = &gorp 此处常量锁定的是地址, 因此*pd = 50可以, pd=&chips不允许。
sum(const double arr[])因此可以保证原值不变。
二维数组指针
arr[r][c] == (*(*arr +r)+c) 数组就是指针
值传递与引用传递:
当数据结构过去庞大时,如果使用值传递在函数内复制一个副本,则消耗太多内存,不如传递的是值的内存地址。
结构体不同于数组,结构的变量名是结构的值而不是地址:
C++记录6:
因此, 为提高内存使用效率, 应使用指针修改指定地址的内存, 而不是返回值。
struct input
{
double x;
}
struct result{ double x; }
void transform(const input *in, result *ou)
{
ou->x=in->x+20;
}
int main()
{
input in.x=5;
result ou;
transform(&in, &ou);
}
类与结构体使用方式一致。
模板类 array 是类而不是数组。
int main()
{
array<double, 4> arrClass
fill(&arrClass)
}
void fill(array<double,4> *pa)
{
for(int i; i<4;i++)
{
cin>>(*pa)[i]
}
}
原文:https://www.cnblogs.com/ruili07/p/9660836.html