关于c++中的复合类型
- 数组
- 字符串
- 结构体
- 共用体
- 枚举
- 指针
- 数和指针的关系
- 常见的存储方式
- 数组替代品
- 存储在每个元素中值的类型
- 数组名
- 数组中的元素数
- 通用格式:typename arrayname [arraysize];
- 数组从0开始编号,在最后一个元的索引,比数组长度小1
- 初始化时可以用大括号{}为元素赋值,中间用逗号隔开。如果只对数组一部分进行赋值,则编译器把其他赋予0
- c++11新增数组初始化可以不用=。大括号可以不包含任何东西,默认全为0 。
- 禁止缩窄转换,如浮点型转整型,int a[]={3.6,1,2.0}; //is not allowed;
- 字符串输入
- cin通过空白(空格,制表符,换行符)来确定字符串结束的位置
- getline()函数通过回车和换行符来确定结束,属于每次读取一行字符串
- 调用该函数可使用cin.getline(变量名,长度)
- 当将一行数据输入到string类中:getline(cin,str),不需要大小参数
- get()函数中有一种变体属于面向行输入,跟geiline类似,但get不会丢弃换行符,需要调用get()函数不带参数的变体,否则将影响输入。
- cin.get((name,ArSize); cin.get(); 或者cin.get((name,ArSize).get();
- get读取空白行后将设置失效符,意味着接下来的输入将会被阻断
- 可以使用恢复命令cin.clear()
- 使用getline使输入方便,使用get使输入仔细,如知道停止输入的原因是已经读取到正整行数据,而不是数组过小。
- char 型数组
- strlen(数组名)确定该数组字符串长度。
- sizeof(数组名)运算符指出整个数组的长度,
- strcpy(数组一,数组二)将数组2复制到数组1,数组一中原有数据清空,
- strncpy(数组一,数组二,字符数),比strcpy接受多一个参数,复制的数量
- strcat(数组1,数组2)将数组2追加到数组1中
- strcmp(字符串地址一,字符串地址二)比较两个字符串是否相等,相等返回0
- 注意添加头文件cstring,比较旧的编译器中为string.h。
- string类
- 使用string时要使用头文件,且在于using namespace std之前;string类隐藏了字符串的性质,让您能够像处理普通变量那样处理字符串。
- 运用时直接定义string类的对象为简单变量:string str1; string str2="chengjunfeng";
- 使用string对象时,能够自动处理string大小,从理论上来说,char数组可以看成一组储存一个字符串的char存储单元,而string类变量是一个表示字符串的实体。
- string简化了字符串合并的操作,直接使用运算符+将两个string对象结合起来,使用=将出现复制,也可以用+=将字符串追加到string对象末尾。str1.size()可以返回str1的长度大小。
- 通过运用行输入getline()函数,需要这样表示:getline(cin,str);因为getline不是string类的方法,它将cin作为参数,指出去哪里查找输入。
- 相对于数组,string不必担心字符串会越界以及可以更简单操作字符串
- 当string对象存储了字符串,可以像数组一样访问单个字符
- 结构是类的基石,结构是用户定义的类型,而结构声明定义了这种类型数据的属性
- 结构的组成部分:
- 结构定义变量后,可以用运算符(.)来访问各个成员如:
- 结构也可以定义结构数组变量,有着数组的特性;cheng feng[2]
- c++提倡使用外部结构声明,不提倡外部变量,
- 通过使用new创建动态结构:
- 创建结构
- 结构类型和new :要创建一个未命名的inflatable类型,并将地址付给一个指针
- iniflatable *ps=new inflatable/////把储存inflatable结构的一块可用内存地址赋给ps
- 访问其成员
- 创建动态结构不能通过成员运算符句点用于结构名,要用箭头成员运算符(->)
- 计算机储存数据时必须跟踪3种基本特性:
- 信息储存在哪里
- 存储的值为多少
- 存储的信息是什么类型
- 指针是一个变量,用于储存值的地址,指针名表示的是地址,其储存的是值的地址而不是值本身,要找值的本身需要用解除引用符 * 。
- 常规变量可以用地址运算符 & 找到它的位置;显示地址时,cout使用16进制表示法。
- 声明和初始化指针:
- 一定要在对指针解除引用前,将指针初始化为一个确定、适当的地址。
- 当需要内存时用new获取,不需要时用delete归还给内存池
- new运算符:使用new,c++会自动为你分配内存
- 使用new自动赋予地址
- 类型 * 变量名 =new 类型 ; int* a=new int;
- 使用new 和delete 时要遵守一下规则
- 不要使用后delete 来释放不是new 分配的地址
- 不要使用delete释放一个内存块两次
- 如果使用new[ ]为数组分配内存,则应使用delete来释放
- 如果使用new为一个实体分配内存,则直接用delete来释放
- 对空指针使用delete是安全的
- 如果使用new后没有用delete释放内存,在自由存储空间上动态分配的变量或结构也将继续存在,实际上将会无法访问自由储存空间中的结构,因为指向这些内存的指针将无效,俗称“内存泄漏”。这些内存被分配出去但无法收回
- 避免造成内存泄漏将同时使用new和delete
- 如果给out提供一个指针,将打印其地址,如果指针为char*,则打印其指向的字符串,需打印地址,则必须将这种指针类型强制转化成另一种类型,如(int*)
- 在编译时给数组分配内存时称为静态编联,即数组在编译时设置长度所需内存,使用new [ ] 的数组称为动态编联,即将在运行时自动为数组分配空间。在运行时需要就创建,不需要就不创建。特就是说运行时创建优于编译时创建。
- 数组名被解释为第一个元素的地址,但是运用了地址运算符时,得到的是整个数组的地址。
- 数组的本质是一种特殊的指针,数组的地址是连在一起的,指针是分散的;数组a[0]时指针指向第一个地址,当a[0+1]是指针自动跳到下一个地址,如数组a为int则&a[0]比&a[1]少8。
- 对于数组n:
- *(n+i)=n[i] //// n[0] 表示*n,即数组n的首地址。 n[3]表示*(n+3) 即数组n的首地址加3个单位
- 数组名被解释为第一个元素的地址,但是运用了地址运算符时,得到的是整个数组的地址
- 为数组分配内存的通用格式
- type _name * pointer_name =new type _name [num_elements] int *a=new int [3];
- 这样可以把指针名当做数组名使用
- c++允许将指针与整数相加减,指针数组P指的是P[0],P=P+1后P指向P[1],即指向指针的下一个元素地址。
- char 数组名、char指针及用引号括起来的字符串常量都被解释为字符串第一个字符的地址
- 自动存储
- 函数内部定义的常规变量使用自动存储空间,称为自动变量
- 函数调用时自动产生,函数结束时自动消亡
- 即自动存储的变量为局部变量
- 静态存储
- 函数外面的变量即全局变量
- 关键字static声名的变量
- 动态存储
- 使用new和delete管理内存池为变量分配地址,数据的生命周期不受程序和函数的生存空间控制
- 使用new和delete让我们使用内存有更大的管理权
- 模板类vector
- vector是一种动态数组,他是使用new创建动态数组的替代品,内部自动使用new和delete来管理内存。
- 使用vector对象,首先要包含头文件vector,它包含在空间std中,所以要在using之前使用头文件
- vector<数据类型> 对象名 (长度,满了之后扩充数量);
- 可以在运行时设置vector对象长度,可在末尾追加新数据也可以在中间插入数据
- vector的扩充机制:按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。
- 模板类arrary(c++11)
- 创建array对象,需添加arrary头文件
- arrary<typename,长度> 对象
- 可以将一个arrary对象赋予另一个arrary对象
关于c++中的复合类型的更多相关文章
- c++中的复合类型
复合类型是指基于其他类型而定义的类型. 而这里介绍的是引用和指针.并且指针和引用都提供了对其他对象的间接访问. 引用 引用还是很好理解的,就是为对象起了另外一个名字,引用类型引用另外一种类型. 通常将 ...
- C语言中的复合类型
复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...
- 带你学够浪:Go语言基础系列 - 8分钟学复合类型
★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- lua 中protobuf repeated 嵌套类 复合类型
PB基础知识科普 syntax = "proto2"; package PB; message Item { required string name = ; } message ...
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11 TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...
- 实现在GET请求下调用WCF服务时传递对象(复合类型)参数
WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原 ...
- go语言 类型:基础类型和复合类型
Go 语言中包括以下内置基础类型:布尔型:bool整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint浮点型:floa ...
随机推荐
- mac环境下java项目无创建文件的权限
1.问题: 先抛问题,由于刚刚换用mac环境,之前windows上开发的代码调试完毕,还未上线.之后上线部署之前,tl直连测试本地环境(mac)环境,功能无法使用,显示java.io.IOExcept ...
- Docker实现GPA+Exporter监控告警系统
Docker实现GPA+Exporter监控告警系统 1.搭建grafana,prometheus,blackbox_exporter环境 # docker run -d -p 9090:9090 - ...
- [记录]NGINX配置HTTPS性能优化方案一则
NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...
- 注入攻击-XSS攻击-CSRF攻击
1.注入攻击 注入攻击包括系统命令注入,SQL注入,NoSQL注入,ORM注入等 1.1攻击原理 在编写SQL语句时,如果直接将用户传入的数据作为参数使用字符串拼接的方式插入到SQL查询中,那么攻击者 ...
- RabbitMQ延迟消息的延迟极限是多少?
之前在写Spring Cloud Stream专题内容的时候,特地介绍了一下如何使用RabbitMQ的延迟消息来实现定时任务.最近正好因为开发碰到了使用过程中发现,延迟消息没有效果,消息直接就被消费了 ...
- 九、chart控件的使用(图表数据的展示)
chart属于老插件网上还有新的插件功能也更多) Chart控件是VS自带的控件,只是比较老了,功能肯定不如现在出来的某些插件强,不过对于简单的显示还是够用:那么现在来看看chart控件的使用方法: ...
- 我造了个好大的"轮子",居然还不是"圆"的!
我造的这个"轮子"指的是集低代码开发与运维为一体的平台,为什么说它不是"圆"的,因为它有些与众不同,甚至可以说是有些另类.至于为什么造这个"轮子& ...
- 腾讯云centos7 从零搭建laravel项目
目标,访问网站出现: -----------------------分割线---------------------------------------- 一.Laravel Homestead 环境 ...
- hdu多校第八场Parentheses Matrix
#include<bits/stdc++.h> using namespace std; ][]; int main() { int t; scanf("%d",&am ...
- 15款好用超赞的chrome插件, 开发者们的必备~
今天推荐一波Chrome插件干货.这些插件带给我开发效率上的提升.所以在这里整理一下,分享给朋友们. 作为一名程序开发者,推荐一波常用的chrome插件,用了就舍不得丢,包括免费FQ工具,github ...