一、基本内置类型 base build-in type【算数类型/类型转换/字面值常量】

基本内置类型(算数类型arithmetic type(整型integral type(字符,布尔bool),浮点型(单精度float,双精度double,扩展精度ex)),空类型void)

//算数类型arithmetic type

C++标准规定尺寸最小值,具体还得看编译器。

基本字符类型(机器字节char,自然语言Unicode:char16_t,char32_t);

byte字节->大多数 8bit->可寻址最小内存块;

word 字->大多数 32bit/64bit->存储的基本单元;

signed/unsigned 符号/无符号:unsigned=unsigned int;字符型 char/signed char/unsigned char各不相同,其中char/unsigned char由编译器决定。

eg:内置类型机器实现 1word=4byte=4*8bit

类型,决定了数据所占的bit数,以及,该如何解释这些bit内容。

tip:选择类型时

无负数值 -> unsigned;

超过int -> long long;

整数(不大) -> signed/unsigned char;

浮点数 -> double;

//类型转换convert

定义definition:(条件condition:类型type=数据data+运算operation)一种被大多数类型支持的运算。

不可移植性nonportable:程序依赖现实环境(将int尺寸看成不变的值);

给signed type赋值 超出范围->undefined未定义;

给unsigned type赋值 超出范围->此type取模后的余数;

eg:int尺寸为4byte;2^32=4294967296;

unsigned ui=;
int i=-;

ui+i=10+(2^32-42)=4294967264;

unsigned u1=,u2=;

u2-u1=10-42+2^32;

ps:while/for中unsigned要小心 i++/++i;

//字面值常量literal

literal的data type由其形式和值决定。

switch(type){

case 整型/浮点型:

  十进制:int~long long;//十进制字面值不会为 负,即“-”不保存在字面值内

  八进制0,十六进制0x:(signed/unsigned)int~long long;

  short无字面值;

case 字符/字符串:

  char -> ' '

  string -> " " ->数组array(+'\0',length+1)

//tip:格式
std::cout<<"hello"
"world"<<std::endl;

case bool:

  true/false;

case pointer:

  nullptr;

case 转译序列:

  nonprintable:\n  \t  \v

  单引号/双引号/问好/反斜线:\'  \"  \?  \\

  和字符集相关:(此处为Java语言)

case ex_指定:

  前缀:L、U、u、u8;

  后缀(不分大小写):U、L、LL;F、L;

}

二、变量variable【定义/声明/标识符/存储空间/作用域】

definition:有名字可操作的存储空间;

变量variable=对象object-值value(只读)。

//定义definition(type+name+space)

初始化initialized:创建时赋值;

ps:赋值:擦除->替代;

默认初始化default initialized:(condition:type+location(函数体function body))外:有默认值;内:build-in type->uninitialized;

ps:目前书上就写了这么多,先将就着往下看吧。

列表初始化list initialization:

//初始化int units_sold 为0,C++11均可全面应用
int units_sold=;
int units_sold={};
int units_sold{};
int units_sold();
//列表初始化+风险信息=编译报错
long double pi=3.1415926536;
int a{pi},b={pi};//错误:存在丢失风险
int c(pi),d=pi;//正确:确实丢失

tip:初始化每一个build-in type变量,因为编译器不想找你这个错误。

//声明declaration(type+name)

分离式编译separate compilation,定义只能一次,要用的话声明就好啦;

extern int i;//不可初始化:搞不懂的话请看声明的定义

C++是静态类型statically typed语言,有类型检查type checking:看此type是否支持此operation。

//标识符identifier

错:{

  _ _xx;

  _Xxx;

  _xxx;//function body外

  关键字key;

  操作符代替名:and/or/bitand/。。。;

}

//作用域scope

同名+不同位置=不同实体;

global scope;block scope;inner/outer scope(就近原则);

「p44 ::xxx」//意思意思,想不起来的话看书去

三、复合类型compound type【引用/指针/声明】

//引用reference(lvalue reference)

引用本身不是对象object,所以不能definition,只能说绑定bind。因为要bind,所以必须初始化。

引用不支持类型转换。//emm... 这句话有骨头可挑,可我的意思不是你理解的我的意思

int iVal=;
int &refVal=iVal;
int &refVal_=refVal;

//指针pointer

pointer是一个对象。

指针可做condition,nullptr:false。

可定义无初始值,默认初始化同function body内的build-in type:uninitialized。

取地址符&;解引用符*。

int *p=&iVal;
//不能定义指向引用的指针

空指针null pointer:

int *p=nullptr;//best way
int *p=;//不能把int变量直接赋值给指针,很绕,请看书
int *p=NULL;//#include<cstdlib>的预处理变量preprocessor variable

void* 指针:

可存放任意对象的地址/任意类型指针,但不能直接操作其对象。内存空间仅仅是内存空间。

tip:请初始化所有指针。

指向指针的指针的指针:

int iVal=,*pi=&iVal;
int ***pppi=&pi;

指向指针的引用:

int *&r=pi;//就近原则,r引用是一个指针,r引用指针是int型
r=&iVal;//r引用指针,令pi指向I
*r=;//r引用指针,解引用得i,即i=0

//声明declaration(up,一部分内容已整合)

同一条definition语句,base type只有一个,但声明符形式可不同,因为声明符包含类型修饰符。

int* p1,p2;//p1是指针,p2是int

int*/int *:强调重点不一样。

C++ Primer 抄书笔记(二)——变量和基本类型(上)的更多相关文章

  1. C++ Primer 学习笔记_5_变量和基本类型(续2)

     变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: enum {input, output, a ...

  2. 《C++ Primer》读书笔记(二)-变量和基本类型

    bool类型与其他类型转换时,0为false,1为true 浮点数赋值给整数的时候,进行近似处理,结果仅保留浮点数小数点之前的部分 整数赋值给浮点数的时候,小数部分记为0,如果该整数超过了浮点类型的容 ...

  3. 02.第二章_C++ Primer学习笔记_变量和基本类型

    2.1  基本内置类型 2.1.1  算术类型 算术类型包括两类:整型和浮点型 2.2  变量 2.3  复合类型 2.4  const限定符 2.5  处理类型 2.6  自定义数据结构

  4. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  5. C#笔记(二)变量

    C#把数据类型分为两种 ● 值类型 ● 引用类型 从概念上看:其区别是值类型直接存储其值,而引用类型存储对值的引用 这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上 如果变 ...

  6. C++ Primer : 第二章:变量和基本类型(1)

    变量和基本类型之第一篇:基本内置类型和变量 一. (1) C++定义了一套包括算数类型和空类型,这些类型有:布尔类型bool,字符类型char,宽字符类型wchar_t,Unicode字符char16 ...

  7. (C/C++学习笔记) 二十三. 运行时类型识别

    二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...

  8. (C/C++学习笔记) 九. 变量的存储类型

    九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...

  9. C++ Primer抄书笔记(二)——变量和基本类型(下)

    四.const限定符[引用/指针/顶层/常量表达式] const对象值不变,必须初始化,能完成此type的大部分operation. 一般,多文件独立变量,编译初始化仅文件内有效: 除非,(条件:初值 ...

随机推荐

  1. Python的条件控制及循环

    一.条件控制: 1.If语句的使用: Python中if语句的一般形式如下所示: 上图中: 如果 "score>=90" 为 True 将执行 "print(‘优秀 ...

  2. 浅谈openresty

    浅谈openresty 为什么会有OpenResty? 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用 ...

  3. C++基类和派生类的构造函数

    派生类不能继承基类的构造函数,若想通过派生类来对基类的private的变量成员进行初始化则需要: 通过派生类的构造函数来调用基类的构造函数完成基类成员变量的初始化. 看下面的例子: #include ...

  4. 学习记录(安装Scala)

    安装完spark之后根据教程安装Scala,在安装的时候提出警告,等了好长时间之后发现无法下载,最后搜索之后发现1.8版本的jdk无法安装,今天又重装了jdk换成了1.7.0的openjdk jdk安 ...

  5. c++中静态成员函数

    静态成员函数 静态成函数和静态成员数据相同,他们都属于某一个类的静态成员而不是某一个对象的成员. 静态数据成员的使用方法和注意事项 1.静态数据成员在定义或说明时前面加上关键字static 2.初始化 ...

  6. conCat()的应用

    编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接.整数相加和浮点数相加.要进行异常处理,对输入的不符合要求的字符串提示给用户: package com. ...

  7. JSP&Servlet学习笔记----第5章

    Servlet进阶API 每个Servlet都必须由web容器读取Servlet设置信息(标注或者web.xml).初始化. 对于每个Servlet的设置信息,web容器会为其生成一个ServletC ...

  8. selenium pyunit单元测试框架

    selenium pyunit单元测试框架 #PyUnit框架 #coding = utf - 8 #将要被测试的类 class Widget: def __int__(self,size = (40 ...

  9. Affinity Propagation Demo2学习【可视化股票市场结构】

    这个例子利用几个无监督的技术从历史报价的变动中提取股票市场结构. 使用报价的日变化数据进行试验. Learning a graph structure 首先使用sparse inverse(相反) c ...

  10. POJ_1485_dp

    题目描述: 每组数据给n个点,点按一维坐标升序给出,要求划分成k块,在每一块中,取一个站,要求每个块中所有的点到站的距离的和的总和最小. 思路: dp题,dp[i][j]表示i个点分成j块的最小距离, ...