首页 > 《C++primer》第二章--变量和基本内置类型

《C++primer》第二章--变量和基本内置类型

基本内置类型

  • 如何选择类型的几点建议

    • 当明确知晓数值不能为负数时,选用无符号类型
    • 使用int进行整数运算。因为short一般表示的范围比较小,而long一般和int有相同的范围。如果表示的范围超过了int就使用long long
    • 算术运算时尽量不要使用char和bool,只有在存放字符型数据和布尔值的时候使用。因为char的符号在有的机器上面是有符号,在另外的一些机器上面确实无符号的,很容易出错。
    • 执行浮点数运算时使用double。因为float的精度不够而且float和double的计算代价相差无几,甚至有些机器上面double的运算速度比float的速度快。
  • 类型转换

    • 当我们赋值给无符号类型一个超过了它表示的范围时,结果是初始值对无符号类型表示范围最大值取余后的结果。例如8bit大小的unsigned char,把-1给它,结果是-1%256,所得结果是255.
    • 把一个负数转化成一个无符号类型的时候,类似于直接给一个无符号数赋值为一个负数,结果等于这个负数加上无符号数的模(例如上例)。
    • 切勿混用有符号和无符号类型的数据进行运算。
  • 字面值常量

    • 转义序列
含义字符含义字符
换行符 回车符
纵向制表符v纵向制表符
反斜线退格符
问号进纸符f
报警(响铃符)a双引号
单引号退格符

还有一种泛化的转义序列

含义符号
响铃7
空字符
换行12
字符M115
空格40
字符Mx4d

注意:如果反斜线后面跟着的八进制数字超过3个,只有前3个数字与构成转义序列


变量

  • 变量定义和声明

    • 建议初始化每个内置类型的变量。这样防止不初始化后直接使用带来的危害。
    • 声明和定义的区别:声明规定了变量的类型和名字,而定义在此基础之上还申请空间,也可能为变量赋初值。
    • 我们可以使用extern int i;的形式,使用在其他文件中定义的变量
    • 变量只能被定义一次可以被声明很多次,变量的定义必须出现在一个文件中,而其他用到该变量的文件必须对其进行声明,但是不能重复的定义
  • 标识符的几点建议

    • C++中标识符由字母,数字和下划线组成,且必须以字母或者下划线开头
    • 标识符能体现实际含义
    • 变量名一般用 小写字母
    • 用户自定义的类名以大写字母开头
    • 如果标识符由多单词组成,则单词中间应该有明显的标识

复合类型

  • C++中有几种复合类型,其中最主要的是指针和引用
  • 引用

    • 引用不是对象,它是给已经存在的对象所起的一个别名
    • 因为引用不是一个对象,所以不能定义引用的引用
    • 引用只能绑定在某个对象身上,即是引用在定义时必须赋初值,而且中间不能改变引用的指向,不能和字面值或者表达式结果绑定在一起
  • 指针

    • 指针和引用区别:指针是一个对象,允许对指针进行赋值或者拷贝,而且在指针的生命周期内,允许它先后指向几个不同的对象;指针无需在定义时赋初值。
    • 因为引用不是对象,没有实际地址,所以不能定义指向引用的 指针
    • 解引用操作是针对指针而言的,解引用操作适用于那些确定了指向了某个对象的有效指针。
    • 建议初始化所有指针
    • 面对比较复杂的指针或者引用的声明的时候,从右往左阅读有助于理解他的真实含义

更多相关:

  • Python 与 ABC 的一个重要区别在于其类型系统。ABC 采用静态类型,编译器会检查程序中的变量类型是否保持一致,如果不一致,程序就无法运行。并且,ABC与当时大多数静态语言不同,采用的是类型推导(和 Haskell 一样),而不是类型声明(比如 C 语言)。而 Python 采用动态类型,所有类型检查都是在程序运行过程中,而不...

  • python是计算机二级考试的科目之一,并没有级别的划分。其考试目标是测试考生掌握Python语言知识的程度和对Python语言的编程能力、调试能力和综合应用能力,在当下的应用中是十分重要的。 什么是python Python语言是一种解释运行、面向对象、扩展性强的程序设计语言,是大学生学习计算机编程能力、理解计算机解决问题的方法的...

  • 正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1)空指针所对应的是指指向的对象为空的指针。            不经发问,什么叫指向为空呢?要理解这点,必须理解如下几点(有点啰嗦,但...

  • 一、reponseType 1、什么是reponseType XMLHttpRequest.reponseType属性是一个枚举类型的属性,返回响应数据的类型,他允许我们手动的设置 返回数据的类型。如果我们将它设置为一个空字符串,它将默认的使用"text"类型。 当将reponseType设置为一个特定的类型的时候需要确保服务...

  • SNMP中,数据类型并不多。这里我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。INTEGER一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志就只有允许转发时的或者不允许转发时的这两种),有些整型变量定义一个特定的范围(例如,UDP和TCP的端口号...

  •   各位代码界的大佬大家好,今天跟大家分享一个在C/C++中常用,但是很危险的一串代码——*(p++)   为什么说这一行代码比较危险呢,因为对于C/C++来说,成也指针,败也指针。C/C++中指针便于我们操作一块连续的内存空间中内容,但是同时我们也要承担一些风险,比如:内存泄漏,野指针,只想垃圾数据等等。今天我们要说的就是指向垃圾数...

  • 智能指针——shared_ptr为了更容易地使用动态内存,新的标准提供了智能指针来管理动态对象。智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象。   智能指针的使用方式与普通指针类似。解引用一个智能指针返回它指向的对象。 1 if (p1 && p1->empty())   最安全的分配和使用动态内存的方法是调用...

  • 1,一个整形数:  int a; 2,一个指向整形数的指针: int *a; 3,一个指向指针的指针,它指向的指针指向一个整形数:  int **a; 4,一个有10个整形数的数组: int a[10]; 5,一个有10个指针的数组,每个指针指向一个整形数: int *a[10]; 6,一个指向有10个整形数的数组的指针:  int...

  • 1 typedef char ListData; 2 //表示以后可以用ListData来代替char类型 3 4 typedef struct node{ //此处node,只在结构体中出现和使用 5 ListData data; 6 struct node *link; 7 }List...

  • 常用的几种数据类型: 类型标识符 说明 字节 值的范围   int 整型 4 –2,147,483,648 到 2,147,483,647 VC++中为long int类 short 短整型 2 –32,768 到 32,767   long 长整型 4 –2,147,483,648 到 2,147,4...

  • 多线程编程 mind-Mapping保存有一下导图的xmind文件,可直接获取 互斥变量 互斥对象 ptrhead相关接口 条件变量 future异步访问类 async类 promise类 package_task类...

  • 我们在实际开发的过程中,可能需要某些类的成员变量并不是针对每一个对象的,而是针对每一个类而言的,比如在银行中有一个利率数据,我们希望的是,当一个利率改变的时候,所有的对象都能够看到这个改变的数据,并利用它,而不是每一个对象都有一个利率成员变量。这个时候就设计到了静态成员变量。 一. 内存那些事 静态成员变量是存放在静态...

  • volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触...

  •   引子     阅读以下代码,并尝试分析 代码解析 在主线程中,线程Id为1,为线程变量赋值 变量==d6ff开启一个新的task,此时线程Id为4,变量==d6ff,并调用Task1开启一个同步Task3,线程Id为1。变量==d6ff,修改值==f598此时第二步启动的Task1运行,线程Id为4,变量==d6ff,修改值=...

  • 操作系统基础    操作系统是协调、控制、管理计算机硬件资源与软件资源的控制程序 为什么要用操作系统?    1.操作系统可以把复杂的操作简化给用户使用或者应用程序  2.可以让应用程序对计算机硬件竞争变的有序  一套完整的计算机分为:操作系统、应用程序、计算机硬件 编程语言的分类   机械语言:使用二进制让计算机工作   优点:运行...