当前位置: 首页 > news >正文

[C++][基础]1_变量、常量和基本类型

 

1.1     算术类型

类型

最小存储空间(位)

bool

1

char

8

wchar_t

16

short

16

int

16

long

32

float

6位有效数字

double

10位有效数字

long double

10位有效数字

 

1.2     常量

不能修改的值成为常量。

 

1.3     变量

与常量相反,是可以修改的值。

 

1.4     引用

引用主要用于函数的形参。引用必须用与该引用同类型的对象初始化。

1.4.1          引用是别名,所有针对引用的操作实际上都是作用在该引用的绑定对象上。引用一旦绑定对象后,不能再绑定到其他对象。

1.4.2          const引用

const引用是指向const对象的引用。

Eg:      const int ival = 1024;

            const int& refval1 = ival;          //ok

            int& refval2 = ival;                     //error

 

1.5     const限定符

const可以用来定义常量。

 

1.6     typedef

用来定义类型的同义词:

Eg:   typedef string StuName;

 

1.7     数组

1.7.1          数组的定义和初始化

数组的维数必须使用大于等于1的常量表示数组的维数必须在方括号内定义。

1.       初始化数组元素

如果没有显示初始化元素, 则数组元素会像普通变量一样初始化:

●在函数体外定义的内置数组,其元素初始化为0

●在函数体内定义的内置数组,其元素无初始化;

●不管在什么位置,如果元素类型为类,则自动调用该类的默认构造函数,如果没有默认构造函数,则必须提供显示初始化。

2.       特殊的字符数组

使用一组字符字面值初始化字符数组时,一定要记得添加结束字符串的空字符。

Eg:

const char cz[6] = "Daniel";      //Daniel is 7 elements

3.       数组不可以直接复制或赋值

Eg:

int ia[] = {0, 1, 2};

int ia2[](ia);      //error

int ia3[3];

ia3 = ia;             //error

 

1.7.2          数组的操作

数组下标的正确类型为size_t

 

1.8     指针

1.9     C风格字符串

1.9.1          C风格字符串的使用

1.       标准库函数

strlen(s)

strcmp(s1, s2)

strcat(s1, s2)

strcpy(s1, s2)

strncat(s1, s2, n)

strncpy(s1, s2, n)

2.       永远不要忘记字符串结束符null

Eg:

char ca[] = {'C', '+', '+'};              //没有结束符

cout << strlen(ca) << endl;        //返回的数值不正确,结果不可预料

 

1.9.2          创建动态数组

1.       动态数组的定义

Eg:

int *pia = new int[10];

2.       初始化动态分配的数组

Eg:

string *psa = new string[10];           //10个未初始化的string

int *pia = new int[10];                        //10个未初始化的int

int *pia2 = new int[10]();          //所有元素初始化为0

3.       const对象的动态数组

必须为这个数组提供初始化;因为每个数组元素都是const对象,所以无法赋值。

Eg:

const int* pci_bad = new const int[10];           //error: 未初始化

const int* pci_ok = new const int[10]();  //ok: 所有元素默认初始化为0

const string* pcs_ok = new const string[10]; //ok: 初始化10个空字符串

4.       允许动态分配空数组

Eg:

size_t size = getSize();

int* p = new int[n];

for (int* q = p; q != p + size; q++)

         /* process */

5.       动态空间的释放

动态分配的内存必须释放,否则会造成内存泄露,耗尽资源。

 Eg:

delete[] pia;

6.       动态数组的使用

 

1.9.3          新旧代码兼容

1.       混合使用string标准库和C风格字符串

Eg:

         string str = "hello";

char* cStr = str.c_str();

2.       使用数组初始化vector

Eg:

const size_t ARR_SIZE = 6;

int aiData[ARR_SIZE] = {1,2,3,4,5,6};

vector<int> ivec(aiData, aiData + ARR_SIZE);



本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/articles/2181405.html,如需转载请自行联系原作者

相关文章:

  • 安装cacti
  • ubuntu 之is not in the sudoers file
  • 我看.NET的瓶颈期
  • zookeeper的高可用部署
  • linux 安装jdk
  • [SQL调优] Maclean讲SQL调优精要
  • (转)linux 命令大全
  • Android Activity的生命周期
  • left join的多重串联与groupby
  • 线性结构之数组
  • js,query 选择radio+选中select+checkbox选中
  • Nagiso 监控服务器的RAID磁盘阵列状态
  • java 面试题解惑一 类的初始化顺序
  • Java虚拟机支持的最大内存限制
  • protobuf编码规则
  • 自己简单写的 事件订阅机制
  • 【5+】跨webview多页面 触发事件(二)
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • CentOS6 编译安装 redis-3.2.3
  • IDEA 插件开发入门教程
  • input的行数自动增减
  • Linux下的乱码问题
  • Python学习之路16-使用API
  • select2 取值 遍历 设置默认值
  • Terraform入门 - 1. 安装Terraform
  • VUE es6技巧写法(持续更新中~~~)
  • web标准化(下)
  • WePY 在小程序性能调优上做出的探究
  • 和 || 运算
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用common-codec进行md5加密
  • 项目管理碎碎念系列之一:干系人管理
  • 运行时添加log4j2的appender
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​MySQL主从复制一致性检测
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma once
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (pytorch进阶之路)扩散概率模型
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (一) storm的集群安装与配置
  • (一一四)第九章编程练习
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)3D模板阴影原理
  • (转)ABI是什么
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .libPaths()设置包加载目录
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 程序发生了一个不可捕获的异常