C++变量和基本类型笔记
2015-08-12 22:48
260 查看
1、基本类型
含有无符号类型的表达式
会把有符号的类型转换成无符号的类型
所以切勿混用无符号类型和带符号类型
2、字面值常量(literal)
每个字面值常量都对应一种数据类型
整型:
十进制字面值具体的由它的值和符号决定。
默认情况下十进制的字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。
十进制字面值的类型是int, long, long long 中尺寸最小的(在能容纳下当前值的前提下)。十进制字面值是整数,带符号的只是对字面值取负值。
八进制和十六进制字面值的类型是int, unsigned int, long, unsigned long, long long, unsigned long long 中尺寸最小的。
字符和字符串字面值:
字符:单引号
字符串:双引号
布尔字面值和指针字面值:
true和false是布尔类型的字面值
nullptr是指针的字面值。
3、变量
变量定义
初始化
初始化与赋值是完全不同的操作
初始化是赋予初始值,赋值是擦除当前值,用新值代替。
默认初始化
每个类各自决定自己初始化对象的方式。而且是否允许不经初始化而定义对象也是有类自己决定。
变量声明和定义的关系
声明:使得名字为程序所知,
定义:负责创建与名字关联的实体。
声明规定了变量的类型和名字,定义不仅规定了类型和名字,还为变量申请了存储空间,也可能会为变量赋一个初值。
变量能且只能被定义一次,但可以多次声明
变量命名规范:
标识符能体现实际含义
变量名一般用小写字母
用户自定义的类一般以大写字母开头
标识符由多个单词组成,单词间应有明显区分。
名字的作用域:
c++大多以花括号分隔
建议第一次使用变量时再定义
嵌套的作用域
内层作用域可以从新定义外层作用域的变量。
复合类型(compound type)是指基于其他类型定义的类型。
引用和指针
定义引用:&
引用即别名
指针(pointer):指向另外一种类型的复合类型。
指针与引用的不同:
指针本身就是一个对象,允许对指针赋值和拷贝,可以先后指向不同的对象。
指针无需在定义时赋初值。
定义指针:*
解引用操作:*
对符号的理解:
声明时,紧随类型符出现的是声明的一部分,在表达式中使用时看作运算符。
空指针
@把int变量直接赋值给指针是错误的操作,即使变量为0
@建议初始化所有指针
void* 指针
可以存放任意对象的指针。对存放的地址的类型不了解。
指向指针的指针,指针是对象,可以再次被指针指向
指向指针的引用,引用不是对象,但可以指向指针
const限定符
一旦创建不能修改,因此必须初始化。
多个文件中共享const变量:
const的引用
指针和const
顶层const:指针本身是常量
底层const:指针所指的对象是常量
constexpr和常量表达式
字面类型(literal type)
算数类型、引用类型和指针都属于字面类型,自定义类Sales_item、IO库、string类型不属于,不能被定义成constexpr。
含有无符号类型的表达式
会把有符号的类型转换成无符号的类型
int i= -42 unsigned u = 10; cout<< u+i<<endl;//如果int占32位,会输出4294967264
所以切勿混用无符号类型和带符号类型
2、字面值常量(literal)
每个字面值常量都对应一种数据类型
整型:
十进制字面值具体的由它的值和符号决定。
默认情况下十进制的字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。
十进制字面值的类型是int, long, long long 中尺寸最小的(在能容纳下当前值的前提下)。十进制字面值是整数,带符号的只是对字面值取负值。
八进制和十六进制字面值的类型是int, unsigned int, long, unsigned long, long long, unsigned long long 中尺寸最小的。
字符和字符串字面值:
字符:单引号
字符串:双引号
cout<< "hahahaha" //注意这里,一行写不下可以换行哦! "hehehe" <<endl
布尔字面值和指针字面值:
true和false是布尔类型的字面值
nullptr是指针的字面值。
3、变量
变量定义
初始化
初始化与赋值是完全不同的操作
初始化是赋予初始值,赋值是擦除当前值,用新值代替。
int units_sold = 0; int units_sold = {0}; int units_sold{0}; int units_sold(0); //上述四条都是正确的初始化方法
默认初始化
每个类各自决定自己初始化对象的方式。而且是否允许不经初始化而定义对象也是有类自己决定。
变量声明和定义的关系
声明:使得名字为程序所知,
extern int i;//声明而非定义
定义:负责创建与名字关联的实体。
int j;//声明并定义
声明规定了变量的类型和名字,定义不仅规定了类型和名字,还为变量申请了存储空间,也可能会为变量赋一个初值。
变量能且只能被定义一次,但可以多次声明
变量命名规范:
标识符能体现实际含义
变量名一般用小写字母
用户自定义的类一般以大写字母开头
标识符由多个单词组成,单词间应有明显区分。
名字的作用域:
c++大多以花括号分隔
建议第一次使用变量时再定义
嵌套的作用域
内层作用域可以从新定义外层作用域的变量。
int num = 10; int main { cout<< num<<endl;//10 int num = 20; cout<<num<<endl;//20 cout<<::num<<endl;//10,::左边为空,向全局作用域获取变量。 }
复合类型(compound type)是指基于其他类型定义的类型。
引用和指针
定义引用:&
int ival= 1024; int &refval = ival int &refval;//报错,引用必须初始化
引用即别名
指针(pointer):指向另外一种类型的复合类型。
指针与引用的不同:
指针本身就是一个对象,允许对指针赋值和拷贝,可以先后指向不同的对象。
指针无需在定义时赋初值。
定义指针:*
解引用操作:*
//解引用只适用于那些确实指向了某个对象的有效指针。
对符号的理解:
声明时,紧随类型符出现的是声明的一部分,在表达式中使用时看作运算符。
空指针
nullptr,0,NULL //NULL是一个预处理变量,在头文件cstdlib中,值为0.
@把int变量直接赋值给指针是错误的操作,即使变量为0
int zero = 0; int *pi = zero; //这样也不行
@建议初始化所有指针
void* 指针
可以存放任意对象的指针。对存放的地址的类型不了解。
int* p1,p2;//近作用域p1 int *p1;
指向指针的指针,指针是对象,可以再次被指针指向
指向指针的引用,引用不是对象,但可以指向指针
const限定符
一旦创建不能修改,因此必须初始化。
多个文件中共享const变量:
extern const int bufSize = 512;
const的引用
指针和const
const double pi = 3.14; double *ptr = π //错误 const double *ptr = π//正确,指针的类型必须与所指的对象的类型一致,例外,允许一个指向常量的指针指向非常量对象。
顶层const:指针本身是常量
底层const:指针所指的对象是常量
constexpr和常量表达式
字面类型(literal type)
算数类型、引用类型和指针都属于字面类型,自定义类Sales_item、IO库、string类型不属于,不能被定义成constexpr。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Ruby中的变量学习总结
- 详解Lua中的变量相关知识点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- dos批处理文件中的变量小结
- 探索PowerShell(七) PowerShell变量
- VBScript教程 第四课VBScript变量
- 关于SQL 存储过程入门基础(基础知识)
- perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
- VBS教程:VBScript 基础-VBScript 变量
- C++联合体转换成C#结构的实现方法
- Erlang语法学习笔记:变量、原子、元组、列表、字符串
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析