CC++学习笔记 2

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