c++复合类型

2019-10-19  本文已影响0人  镜中无我
char[]
string
结构
union
枚举
指针和c++基本原理

面向对象编程和传统面向过程编程的区别在于,OOP强调运行时决策。而后者因此更加灵活。c++使用new关键字申请新的地址空间,并用指针来跟踪这些内存。在这样的新策略中,地址被视为制定的量,而值则变成派生量,指针变量用*表示间接值或者解除引用。

  • 不要使用delete来释放不是new分配的内存
  • 不要释放同一个内存块两次
  • 如果使用new[]和new来分别创建动态内存或者动态数组则需要用delete[] 和delete来释放
  • 对空指针使用delete是安全的
  • 在cout和其他多数c++表达式中,char数组名,char指针以及用引号括起来的字符串常量都被解释为字符串第一个字符的地址
  • 一般情况下给cout指针会输出地址,而对于char*则输出字符串
  • c++字符串字面值不能保证被唯一的存储
  • 对于字符数组在初始化时可以用字面常量来赋值,而其他情况下用strcpy()或strncpy(),注意加cstring头文件
  • 一个很好的例子是使用动态数组来创建一个包含多个不一致长度的字符串数组,可以使用一个自定义的输入函数来定义最大长度的局部变量(函数结束自动释放),然后将从cin输入的字符串有效长度赋值给动态字符数组(使用strcpy,记得加1),然后记得在原函数里面使用delete释放
自动存储,静态存储,动态存储(c++11增加了线程存储)
  • 函数外的空间中
  • static关键字修饰
  • 由此引出了内存泄漏的异常,这主要是因为指向动态内存的指针不存在了,但是内存空间没有被释放,变成了无法访问的地址(主要是因为动态内存在heap上),这样的内存变成了泄露空间,即被占据而无法访问,进而导致空间被耗尽,造成溢出。
上一篇下一篇

猜你喜欢

热点阅读