2 变量和基本类型

2.1 基本内置类型

  C++定义了一系列包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算术类型包含字符,整型数,布尔值和浮点数。空类型不对应具体的值,当函数不需要返回任何值时,使用空类型作为返回类型。下表是C++的七种基本数据类型。

类型

含义

最小尺寸

bool

布尔类型

未定义

char

字符型

8

1个字节

wchar_t

宽字符

16

2或4个字节

int

整型

16

4个字节

float

单精度浮点型

6位有效数字

4个字节

double

双精度浮点型

10位有效数字

8个字节

void

无类型

null

  布尔类型(bool)的取值为真(true)或者假(false)。

  一些基本类型可用一个或多个类型修饰符进行修饰:

  • signed(带符号的)
  • unsigned(无符号的)
  • short(字节/2)
  • long(字节*2)

2.2 变量

  变量提供一个具名的,可供程序操作的存储空间。即告诉编译器在何处创建变量的存储,以及如何创建变量的存储。对C++程序员来说,变量(variable)和对象(object)一般可以互换使用。

2.2.1变量定义

  变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表。其基本形式是: 类型说明符 变量名1,变量名2,...;

  当对象在创建时获得了一个特定值,我们就说这个对象被初始化。注意:初始化不是赋值,初始化是创建变量时赋予其一个初始值,赋值是把对象当前值擦除,而已一个新值替代。

2.2.2变量声明和定义的关系

  为了允许把程序拆分成多个逻辑部分来编写,C++语言支持分离式编译机制,该机制允许将程序分割成若干个文件,每个文件可被独立编译。而为了支持分离式编译,C++语言将声明和定义区分开来。

  声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字就必须包含对那个名字的声明。定义(definition)负责创建与名字关联的实体。

  如:extern int i;  //声明i,不定义

    extern int i=0;//定义i

2.2.3标识符

  C++标识符(identifier)由字母,数字和下划线组成,其中必须由字母或下划线开头。对小大写敏感。关键字与操作符不可被作为标识符。

  变量命名约定俗成的规范:

  • 标识符要能体现实际含义
  • 变量名一般用小写字母
  • 用户自定义的类名一般以大写字母开头
  • 标识符由多个字母组成,单词间应有明显区分,如下划线,大写单词第一个字母

2.2.4名字的作用域

  作用域是程序的一部分。同一个名字在不同的作用域中可能指向不同的实体,名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端结束。

2.3 复合类型

  复合类型(compound type)是指基于其他类型定义的类型。C++主要用到的就是引用和指针。

2.3.1 引用

  引用(reference)为对象起了另外一个名字,即别名。引用类型引用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d为类型的变量名。

  一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须被初始化。

2.3.2指针

  指针(pointer)是指向(point to)另外一个类型的复合类型。指针本身就是一个对象,允许对指针赋值和拷贝;指针无须在定义时赋初值。但建议要初始化指针。

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

  type *var-name;

  其中type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。

获取对象地址

  取地址符(&),可获取指针存放某个对象的地址。

指针值

  指针值(即地址)应属于以下四种状态之一;

  • 指向一个对象
  • 指向紧邻对象所占空间的下一个位置
  • 空指针,意味着指针没有指向任何对象
  • 无效指针,除上述情况之外的其他值

利用指针访问对象

  解引用符(*)访问指针指向的对象。仅适用某个对象的有效指针。

  注:在声明语句中,&和*用于复合类型;在表达式中,&和*用于运算符。

空指针

  空指针(null pointer)不指向任何对象。得到空指针可用字面值nullptr来初始化指针,也可将指针初始化为字面值0。过去用null的预处理变量来给指针赋值。其头文件为cstlib。

2.3 const限定符

  Const对象一旦创建后其值就不能再改变,const对象必须初始化。

2.4 处理类型

2.4.1 类型别名

  类型别名(type alias)是某种类型的同义词。两种方式定义类型别名:

  • 使用关键字(typedef )typedef type newname;
  • 使用别名声明(alias declaration)using newname=type;

2.4.2 指针、常量和类型别名

typedef char *pstring;//pstring是类型char*的别名,即指向char的指针

const pstring cstr=0;//cstr是指向char的常量指针

const pstring *ps;  //ps是一个指针,它的对象是指向char的常量指针

2.5 自定义数据结构

定义结构

  为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct type_name {

member_type1 member_name1;

member_type2 member_name2;

member_type3 member_name3;

.

.

} object_names;

  type_name 是结构体类型的名称,member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。

访问结构成员

  为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。

预处理区概述

  通常我们说C++的Build(这里没用“编译”是怕混淆)可分为4个步骤:预处理、编译、汇编、链接。预处理就是本文要详细说的宏替换、头文件包含等;编译是指对预处理后的代码进行语法和语义分析,最终得到汇编代码或接近汇编的其他中间代码;汇编是指将上一步得到的汇编或中间代码转换为目标机器的二进制指令,一般是每个源文件生成一个二进制文件(VS是.obj,GCC是.o);链接是对上一步得到的多个二进制文件“链接”成可执行文件或库文件等。

Preprocessor指令一般格式如下:

# preprocessing_instruction [arguments] newline

  其中preprocessing_instruction是以下之一:define, undef, include, if, ifdef, ifndef, else, elif, endif, line, error, pragma;arguments是可选的参数,如#include后面的文件名;Preprocessor占一行,可用“\”紧跟newline续行,但续行不是Preprocessor的专利,且续行在Preprocessor前处理。

  Preprocessor指令有以下几种:

  • Null,一个 # 后跟 newline ,不产生任何影响,类似于空语句;
  • 条件编译,由 #if, #ifdef, #ifndef, #else, #elif, #endif 定义;
  • 源文件包含,由 #include 定义;
  • 宏替换,由 #define, #undef, #, ## 定义;
  • 重定义行号和文件名,由 #line 定义;
  • 错误信息,由 #error 定义;
  • 编译器预留指令,由 #pragma 定义。

C++基础知识2的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  10. APP测试入门篇之APP基础知识(001)

    前言        最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...

随机推荐

  1. Linux如何设置dns

    首先打开dns设置文档 空的dns文档如图所示 键入图片中的文本保存即可设置了自己的dns 保存后推出即可.

  2. CentOS克隆机器步骤,图文教程

    在上一篇文章中,主要介绍了CentOS的装机步骤,这一篇文章主要介绍如何从一台装好的CentOS克隆出另一台机器,并且配置好网络. 首先被克隆的CentOS需要关机, 右键点击被克隆的CentOS-& ...

  3. Winfrom 简单的安卓手机屏幕获取和安卓简单操作

    为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西, 实现了以下简 ...

  4. SAP中常用SM系列事务代码总结

    SM01 锁定事物 SM02 系统信息 SM04 显示在线用户 SM12 删除,显示锁对象 SM13 看update  request SM21 看下系统日志 SM30|SM31 维护table|vi ...

  5. dd命令

    前言 dd命令文件处理 dd命令用于复制文件并对原文件的内容进行转换和格式化处理.dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果. dd命令 转换拷贝一个文件,特 ...

  6. Maven常见错误以及解决方案【转载】

    常见的Maven错误 当遇到401错误的时候,看看自己当前使用的Maven是集成的还是自己下载的,然后去配置setting.xml文件

  7. 06jQuery-05-事件

    不同的浏览器绑定事件的代码都不太一样,所以我们使用jQuery来写代码的话,可以屏蔽不同浏览器之间的差异. 在jQuery中,可以使用 on 来绑定一个事件,指定事件的名称和对应的处理函数: // 获 ...

  8. linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

    本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...

  9. Sql Server——运用代码创建数据库及约束

    在没有学习运用代码创建数据库.表和约束之前,我们只能用鼠标点击操作,这样看起来就不那么直观(高大上)了. 在写代码前要知道在哪里写和怎么运行: 点击新建查询,然后中间的白色空白地方就是写代码的地方了. ...

  10. jquery实现点击div外隐藏div

    html <div style="width:100px;height:100px;border:1px solid #ff0" id="div"> ...