c++复合类型
1.数组
- 数组存储同类型的值;
- 数组使用下标或索引对元素进行标号,从0开始编号;
- 只能在定义数组时才能使用初始化,此后就不可以了,也不能将一个数组赋给另一个数组;
- 初始化数组时,提供的值可以少于数组元素的值。如果只对数组的一部分初始化,则编译器将把其他元素设置为0。因此,将数组中所有元素都初始化为0非常简单——只需显式地将第一个元素初始化为0,然后让编译器将其他元素都初始化为0即可:long totals[500] = {0}.
2.字符串
要将字符串存储到数组中,最常用的方法有两种——将数组初始化为字符串常量、将键盘或文件输入读入到数组中。
3.string类
- 可以使用c-风格字符串来初始化string对象;
- 可以使用cin来将键盘输入存储到string对象中;
- 可以使用cout来显示string对象;
- 可以使用数组表示法来访问存储在string对象中的字符。
c风格的字符串是用数组存放的,一般要以'\0'结束而c++主要以string类代替,更加高效,且不易出错
例如:string str = "123";就是c++的风格;char str[4]="123";就是c风格。string是c++中的关键字,和int,float等等一样, 在c++中,string 定义的变量可以直接存储字符串。在C语言中是没有这种直接存储字符串的变量的。
[ ]里面是4,是因为,C风格的字符串,在最后都会默认添加'\0',所以"123"本质上是1 2 3 '\0'
它其实是占四个字节。所以如果你只定义3个存储空间的话,那'\0'这个字符串终止标志就回被丢弃,那么以后的应用就回出现问题。举个例子:你用strlen(str)试试查看长度为3时的这个字符串的长度,很可能就会有问题。 '\0' 是c字符串都存在的。
string类可以使用运算符+将两个string对象合并起来,还可以使用+=将字符串附加到string对象的末尾。
c++11还有wchar_t、char16_t和char32_t。对于这些类型的字符串字面值,c++分别使用前缀L、u和U表示。
4.结构
结构比数组更灵活,因为同一个结构可以存储多种类型的数据.
可以像创建char或int类型的变量那样创建如下的inflatable类型

5.指针
一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。
为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:
typeName * pointer_name = new typeName;
new 分配的内存块通常与常规变量声明分配的内存块不同。常规声明分配在栈(stack)中,而new从被称为堆(heap)或自由存储区(free store)的内存区域分配内存。
在编译时给数组分配内存被称为静态联编,但使用new时,如果在运行阶段,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编。使用静态联编时,必须在编写程序时指定数组的长度;使用动态联编时,程序将在运行时确定数组的长度。
使用new和delete时,应遵循以下规则:
- 不要使用delete来释放不是new分配的内存;
- 不要使用delete释放同一个内存块两次;
- 如果使用new[]为数组分配内存,则应使用delete[]来释放;
- 如果使用new[]为一个实体分配内存,则应使用delete(无方括号)来释放;
- 对空指针应用delete是安全的。
c++允许将指针和整数相加。加1的结果等于原来的地址值加上指向的对象占用的总字节数。还可以将一个指针减去另一个指针,获得两个指针的差。后一种运算将得到一个整数,仅当两个指针指向同一个数组时,这种运算才有意义,这将得到两个元素的间隔。

new运算符允许在程序运行时为数据对象请求内存。该运算符返回获得内存地址,可以将这个地址赋给一个指针,程序将只能使用该指针来访问这块内存。如果数据对象是简单变量,则可以使用解除引用运算符(*)来获得其值;如果数据对象是数组,则可以像使用数组名那样使用指针来访问元素了如果数据对象是结构,则可以用指针解除引用运算符(->)来访问其成员。
指针和数组紧密相关。如果ar是数组名,则表达式ar[i]被解释为*(ar+1),其中数组名被解释为数组第一个元素的地址。
运算符new和delete允许显示控制何时给数据对象分配内存,何时将内存归还给内存池。自动变量是在函数中声明的变量,而静态变量是在函数外部或者使用关键字static声明的变量,这两种变量都不太灵活。自动变量在程序执行到其所属的代码块时产生,在离开该代码块时终止。静态变量在整个程序周期内都存在。
c++复合类型的更多相关文章
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- 实现在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 ...
- C语言中的复合类型
复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...
- 学习C++.Primer.Plus 4 复合类型
本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...
- C++Primer快速浏览笔记-复合类型
C++Primer2.3节介绍了两种复合类型:引用和指针 1.引用 引用并非对象,它只是为一个已经存在的对象所起的别名. 一旦初始化完成,引用将和它的初始值对象一直绑定在一起,不能重新绑定到另一个对象 ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- struts复合类型传值(对象传值)
01:导包,配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version ...
- c++学习总结--复合类型,const。
复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...
- postgresql 函数 参数为复合类型
postgresql没有存储过程,但是函数功能很强大. 在近期开发的电商管理平台中,对于产品的类目管理,设计时有个属性字段,设为字符数组,但是EF不支持数组的操作,所以在添加和修改类目时,需要对属性的 ...
随机推荐
- 【转载】SQL面试题
[本文转自]http://blog.csdn.net/u012467492/article/details/46790205 1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name ...
- 使用python计算softmax函数
softmax计算公式: Softmax是机器学习中一个非常重要的工具,他可以兼容 logistics 算法.可以独立作为机器学习的模型进行建模训练.还可 ...
- 转载:4412环境搭建:arm-linux-gcc: 没有那个文件或目录
4412环境搭建:arm-linux-gcc: 没有那个文件或目录 2014年10月15日 ⁄ 环境搭建 ⁄ 共 993字 ⁄ 字号 小 中 大 ⁄ 评论 11 条 ⁄ 阅读 6,125 次 最近弄了 ...
- QString:常用成员函数总结
QString是Qt中使用频率最高的几种数据类型之一,主要在于其提供了大量功能强大的成员函数,这里重点介绍一些常用的成员函数: 一.字符串处理相关 1.1 split() (拆分字符串) split( ...
- poj 3295 Tautology 伪递归
题目链接: http://poj.org/problem?id=3295 题目描述: 给一个字符串,字符串所表示的表达式中p, q, r, s, t表示变量,取值可以为1或0.K, A, N, C, ...
- POJ 3683 Priest John's Busiest Day
看这个题目之前可以先看POJ2186复习一下强联通分量的分解 题意:给出N个开始时间和结束时间和持续时间三元组,持续时间可以在开始后或者结束前,问如何分配可以没有冲突. -----–我是分割线---- ...
- bzoj2333[SCOI2011]棘手的操作 洛谷P3273 [SCOI2011]棘手的操作
2333? 先记一下吧,这题现在全部都是照着题解做的,因为怎么改都改不出来,只好对着题解改,以后还要再做过 以后再也不用指针了!太恶心了!空指针可不止直接特判那么简单啊,竟然还要因为空指针写奇怪的分类 ...
- 213 House Robber II 打家劫舍 II
注意事项: 这是 打家劫舍 的延伸.在上次盗窃完一条街道之后,窃贼又转到了一个新的地方,这样他就不会引起太多注意.这一次,这个地方的所有房屋都围成一圈.这意味着第一个房子是最后一个是紧挨着的.同时,这 ...
- 转】Mahout构建图书推荐系统
原博文出自于: http://blog.fens.me/hadoop-mahout-recommend-book/ 感谢! Mahout构建图书推荐系统 Hadoop家族系列文章,主要介绍Hadoop ...
- ASP.NET Core MVC使用MessagePack配合前端fetch交换数据
1.安装Nuget包 - WebApiContrib.Core.Formatter.MessagePack https://www.nuget.org/packages/WebApiContrib.C ...