Visual C++ 2010 入门经典

来源:互联网 发布:php公开课 编辑:程序博客网 时间:2024/06/06 00:35

第二章 数据、变量和计算

2.2 定义变量

  • 变量名包含字母、数字、下划线,必须以字母或下划线开头,不允许空格,区分大小写。变量是一段内存,可引用和存储数据
  • 变量声明也属于定义(特殊情况除外)
int value; %既是声明也是定义
  • 声明是将名称以及这个名称用途的信息引入程序;定义设计分配这个名称的计算机内存
  • 变量初始化
int value = 0;int value(0);// 函数表示法

2.3 基本数据类型

三类基本数据类型:存储整数的类型、存储非整数值的类型(浮点类型)、指定空的值集或不指定任何类型的 void 类型。

  • int 占用4个字节
  • long 占用4个字节,也可以写作 long int
long value3 = 30L; // L 表示 long 型,没有附加 L 则是 int 型
  • long long 型占用8个字节,以 LL 结尾
  • char 占用1个字节 27271 可以存储给定值域内的整数或者存储单个 ASCII 字符的代码。
char letter = 'A';  // ' '之间单个字符char letter = 65;   // A 的 ASCII 值是65。
  • wchar_t 占用2个字节,表示宽字符型
wchar_t letter = (0x5A); // 0x 表示16进制,左高右低wchar_t letter = L'Z';   // L 表示16位字符代码值 wchar_t letter = (L'Z'); // 函数表示法
  • 整型修饰符
    默认 char、int、 short、long 整型变量将存储 signed 整数值
    char 和 signed char 表示不同类型。
signed value = -5; // 单独使用关键字,signed表示intunsigned long value = 5UL; // U 表示无符号
  • Bool类型
    只有两个值的变量: true、 false,被认为是整数类型。
bool result = true; bool result = (true);
  • 浮点类型
    浮点型必须包含一个小数点或者一个指数或者两者都有。如果数字值既没有小数点也没有指数,则是整数。double 占用8个字节; float 占用4个字节
double value = 5.2;float pi = 3.14159f; // f表示浮点型



图 1 - 基本数据类型

  • 在C++中,所有类型的常数都称为字面值
    不能指定short型或者unsigned short 型的字面值



    图 2 - 字面值

  • 定义数据类型的同义词
    typedef 为现有的类型定义自己的类型名称。

typedef long int BigOnes;BigOnes mynum = 0L;
  • 具有特定值集的变量
    枚举:
enum Week {Mon,Tues,Wed,Thurs,Fri,Sat,Sun} thisWeek;  // 声明了名称为 Week 的枚举类型,thisWeek 只能采用大括号之间指定的常量值。thisWeek = Thurs; // thisWeek的值是3。enum Week nextWeek; // 也可以忽略关键字 enum enum Week {Mon = 1,Tues,Wed,Thurs,Fri,Sat,Sun } thisWeek; // 默认从0开始。

不允许用函数表示法初始化枚举器。

2.4 基本输入输出操作

  • 从键盘输入
    通过标准输入流 cin 从键盘获得输入,使用流的析取运算符 >> ,忽略空白。
std::cin >> num1 >> num2; // 连续的值之间必须有一些空白,以便区分
  • 到命令行的输出
    通过标准输出流 cout 使用插入运算符 << 把数据传递到输出流。

  • 格式化输出
    利用操作符处理输出对齐问题。操作符在标准库头文件iomanip 中定义,因此需要添加头文件。
    setw(n)}输出的值在 n 个空格宽的字段中遵循右对齐.setw(n) 只紧跟在它的插入运算符之后的单个输出值起作用。

  • 转义序列
    以反斜杠开头



    图 3 - 转义序列

2.5 C++中的计算

  • const修饰符
const double width = 21.5*2.0;  const double area = width*length; // 编译器必须清楚常量表达式中的所有变量
  • 修改变量
lhs op= rhs  // op : + - *  /  % <<  >>  & ^  

等价于

 lhs = lhs op (rhs) 
++ count;--count;count ++ ;count -- ;count +=  1;count  -= 1;



图 4 - 运算符

2.6 类型转换和强制类型转换

  • 先类型转换再运算,转换过程中不会改变被转换变量本身的类型,临时存储,运算完成后释放。

  • 任何 char、signed char、unsigned char、short、unsigned short 在操作之前至少被转换成 int 类型。
    赋值语句中的隐式类型转换会造成信息丢失。

  • 显示类型转换

static_cast<the type to convert to>(expression);}
  • 转换优先级
long double > double > float > unsigned long long > long long > unsigned long > long > unsigned int > int

2.7 Auto 关键字

  • auto关键字用作变量的类型,根据初始值判断变量的类型。初始值也可以是表达式
    表达式中的变量必须在之前初始化
auto n = 16; // Type is intconst auto pi = 3.14159L; // Type is long double

2.8 查看类型

  • typeid操作符可以查看表达式的类型:
typeid(expression).name()
  • 需要头文件 #include < typeinfo >
cout << "Type of x*y is" << typeid(x*y).name() << endl; 

2.9 按位运算符

  • 按位运算符只处理整型变量或者整型常量,把操作数看成一系列单独的位。
  • 运算符有: & 与 ; | 或 ; ^ 异或 ; ~ 非 ; >> 右移 ; << 左移
  • 按位与操作可进行掩码操作,把变量中不必要的位设置为0,必要的位设置为1。
char first = 'A';   char last  = 'Z';       first ^= last;last ^= first;first ^= last; // 交换A和Z,适用于所有值
  • 移位运算要补0。只要位不丢失,向左移动 n 位,相当于原值乘以 2n; 向右移动 n 位,相当于原值除以 2n
  • 要注意移位运算符和输入/出流运算符的区分,加括号来区分
  • 要注意有符号整数的移位运算。有符号整数移位时,符号位将向右传递。
char number = -104; // Binary representation is 1001 1000number >>=  2; // Result is 1110 0110

2.10 lvalue 和 rvalue

  • lvalue 指的是内存中持续存储数据的一个地址;rvalue是临时存储的表达式结果。所有产生lvalue的表达式都可以出现在赋值语句中等号的左边。表达式的结果不是lvalue就是rvalue。
int a = 0 , b = 0 , c =0;a = b + c; //  b + c 的结果临时存储在一个内存位置中,赋值后则丢弃结果的内存位置。 b + c 的结果是 rvalue   b = ++a;// ++a的结果是递增之后的 a ,a++ lvaluec = a++; // a++临时将 a 的值存储为表达式的结果,然后递增 a  ++a 是rvalue

2.11 了解存储时间和作用域

变量可以有三种不同的存储时间:自动存储时间;静态存储时间;动态存储时间。

  • 自动变量
    在一个代码块内声明的变量,具有局部作用域。自动变量占用的空间在一个称为栈的内存区域中自动分配。

  • 生存期是执行过程中的一个期间,从创建该变量开始,到销毁该变量并且释放其占用的内存时结束。

  • 变量的作用域是指可以在其中访问这个变量的程序代码区域。
    内部作用域可以访问在外部作用域开始处声明的变量,而且会修改外部作用域变量的值。

  • 全局变量
    在所有代码块和类之外声明的变量称为全局变量,具有全局作用域。表明在全局变量声明的位置之后,所有的函数都可以访问他们。在默认情况下,全局变量具有静态存储时间,从程序开始到程序结束时为止。全局变量的初始化在 main( ) 函数执行之前。
    全局变量可被具有相同名称的局部变量隐藏,可用域解析运算符 :: 获得全局变量



    图 5 - 作用域

  • 静态变量
    在一个代码块作用域内声明一个变量,但是要要让它有静态存储时间,利用 static 可以实现该功能。实际上,即使静态变量是在一个代码块中声明,并且只能从这个代码块内部使用,但是在程序的生存期内,它将持续存在。它的作用域仍然是这个代码块,但具有静态存储时间。

static int count; // 如果声明静态变量时,没有提供初始值,则程序对它进行初始化。默认初始值为0。

如果没有初始化自动变量,则它包含的数据是最近使用它的所占用的内存的程序留下来的无用值

2.12 名称空间
利用 using 声明将一个名称从 std 名称空间导入源文件。

using std::cout; //这就允许在源文件中使用名称cout且它被解释为std::out。之后的代码使用此名称时无需限定符。
  • 名称空间提供了一种将在程序某一部分使用的名称与另一部分使用的名称分隔开的方法。例如:多人协作的项目,避免相同名称应用到不同的函数,造成的混淆。
using namespace std ; // using 指令 
  • 与 using 声明不同,其作用是把来自 std 的名称空间的所有名称导入源文件。这样就可以引用在该名称空间中定义的所有名称,而不必在程序中限定名称。实际上否定了使用名称空间的主要原因——即防止意外的名称冲突。

  • 声明名称空间
    定义自己的名称空间.利用关键字 namespace 可以声明一个名称空间

namespace myStuff{// Code that I  want to have in the namespace myStuff}

不能在函数内声明名称空间
一定不能把 main( ) 函数的定义放在名称空间内。表明执行开始的函数 main( ) 必须始终在全局名称空间作用域内。
可以使用名称空间包括函数、全局变量和其他有名称的实体(例如程序中的类)。

  • 多个名称空间
    对于一个具有给定名称的名称空间,可以有多个声明,所有具有给定名称的名称空间块的内容都可以在同一个名称空间内。
namespace myStuff{}namespace caculateStuff{//从该名称空间块内引用第一个名称空间快中的名称,必须限定他们。} namespace myStuff{//第一个声明的继续,该名称空间块内引用第一个名称空间块中的名称,不必限定他们}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 领导问任务完不成怎么办怎么回答 我和我老婆感情出现问题了怎么办 手机坏了手机浏览器里照片怎么办 不小心把电脑ie浏览器删了怎么办 华为手机自带浏览器中病毒了怎么办 手机打开浏览器提示中病毒了怎么办 手机卸载了浏览器和软件商店怎么办 房东在我租房期间贴房子出租怎么办 额头上毛孔大 还有些黑怎么办 孩子学跳舞老师压的疼怎么办 步步高点读机电池坏了怎么办 电脑连接受限制或无连接怎么办 电脑无线网受限制或无连接怎么办 电脑网络受限制或无连接怎么办 3 证书报考大专证书丢了怎么办 广工期末考试被老师警告了怎么办 我在农村不当队长我能力不够怎么办 我在农村不当队长我当代表怎么办 北京本地人社保中间断了一年怎么办 我想把大哥的孩子带出国要怎么办 美国有亲戚想让孩子出国怎么办 连接温控器的线断了怎么办 植发后好多原生发都脱落了怎么办 4岁宝宝支体能力差怎么办 当与游客发生矛盾时员工怎么办 顾客与同事发生矛盾你该怎么办 当一个人犯下的过错难以原谅怎么办 开车把别人撞成植物人了该怎么办 结婚证丢了孩子上不上学了怎么办 办房产证前加户主姓名怎么办手续 孩子上学户口跟房产不在一起怎么办 我家小孩被别的家长打了怎么办 要是小孩骗家长说老师打他怎么办 孩子在学校被家长打小孩怎么办 小孩在学校被老师打淤青家长怎么办 小孩和家长一吵架就说死怎么办 王者荣耀号被别人家长联接了怎么办 儿子12岁总是跟大人顶嘴怎么办 课堂上有学生和你顶嘴你怎么办 小孩看到大人吵架就哭了 怎么办 五年级的孩子叛逆爱发脾气怎么办