第二章 变量和基本类型 《C++Primer》

任何常用的编程语言都具备一组公共的语法特性,不同的语言仅在特征的细节上有所区别。要想学习并掌握一种编程语言,理解其语法特征的实现细节是第一步。最基本的特征包括:

  • 整型、字符型等内置类型
  • 变量,用来为对象命名
  • 表达式和语句,用于操作上述数据类型的具体值
  • if或者while等控制结构,这些结构允许我们有选择的执行一些语句或者重复的执行一些语句
  • 函数,用于定义可供随时调用的计算单元
大多数编程语言通过两种方式来进一步补充其基本特征:一是,赋予程序员自定义数据类型的权利,从而实现对语言的扩展;二是将一些有用的功能封装成库函数供给程序员。

这一段说的太好了,让我感觉理解了程序的本质偷笑

下面是正题:

  1. 数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作
  2. C++定义了一套包括算数类型和空类型在内的基本数据类型,其中算数类型包括整形(含字符和布尔型)和浮点型。算数类型的尺寸(占的比特数)在不同的机器上有所差别。(最懒得看这些了,但是某公司笔试居然考了==)下表列举了C++标准规定的尺寸最小值,同时允许编译器赋予这些类型更大的尺寸(所以说可能不同的编译器结果也不一样)。
  3. C++:算数类型
    类型含义最小尺寸
    bool布尔类型未定义
    char字符8
    wchar_t宽字符16
    char16_tUnicode字符16
    char32_tUnicode字符32
    short短整型16
    int整型16
    long长整型32
    long long长整型64
    float单精度浮点型6位有效数字
    double双精度浮点型10位有效数字
    long double扩展精度浮点型10位有效数字
    基本的字符类型是 char,一个char的空间应确保可以存放机器基本字符集中的任意字符对应的数字值,也就是说一个char的大小跟一个机器字节一样。Unicode 是用于表示所有自然语言的字符的标准。
  4. 说到这里,想起了前段时间看到的,浮点型在内存中是如何存储的。http://www.cnblogs.com/fly-height/articles/2340396.html
  5. 选择类型:大多数程序员能够也应该对数据类型的使用做出限定从而简化选择过程。以下是选择类型的一些经验准则:
  • 当明确知晓数值不能为负值,选用无符号类型
  • 使用int进行整数运算。short太小,而long一般和int 有一样的尺寸,若超了int范围,用long long 
  • 算术表达式中不要用char 或者 bool,因为char在一些机器上是有符号的,在另一些上是无符号的,所以用char运算特别容易出问题。如果就是要用,明确sighed和unsigned
  • 浮点运算选用double,因为float通常精度不够而且双精度和单精度浮点计算代价相差无几。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T。T标号好难用。。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

类型转换

  1. 浮点数赋值给整数类型,结果仅保留浮点数中小数点之前的部分。
  2. 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数,如-1给unsigned char 结果是255.
  3. 当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的,此时,程序可能继续工作、可能崩溃也可能生成垃圾数据。
  4. 程序应该尽量避免依赖于实现环境的行为,如果把int尺寸看成是确定不变的已知量,那么这样的程序就称作不可移植的
  5. 尽管我们不会故意给无符号对象赋一个负值,但是却很可能写出这么做的代码。当一个算术表达式中既有无符号数又有int 时,那个int值就会转换成无符号数
    for(int i=10;i>=0;--i)
      std::cout<<i<<std::endl;
    
    //错误:变脸u永远也不会小于0,循环条件一直成立
    for(unsigned u =10;u>=0;--u)
      std::cout<<u<<std::endl;

字面值常量

  1. 字符串字面值的实际长度比它的内容多1,这是字符串结尾处的\0
  2. 如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔,则它们实际上是一个整体。当书写的字符串字面值比较长,写在一行里不太合适,就可以采取分开书写的方式:
    // 分多行书写的字符创字面值
    cout<<"a really,really long string literal"
               "that spans two lines."<<endl;

转义序列

两类字符程序员不能直接使用:不可打印字符,在C++语言中有特殊含义的字符。此时需要用到转义序列:
以反斜线作为开始
转义序列
换行符 \n横向制表符 \t报警(响铃)符 \a
纵向制表符 \v退格符 \b双引号 \"
反斜线 \\问号 \?单引号 \'
回车符 \r进纸符 \f  

泛化的转义序列,\x后跟1个或多个十六进制数字,或者 \ 后跟1、2、3个八进制数字。

变量

默认初始化

默认值由变量类型决定,同时变量的定义位置也会有影响。
如果是内置类型的变量未被显示初始化,他的值由定义的位置决定。如全局变量初始为0,函数内,未定义, 如果试图拷贝或以其他形式访问此类值将引发错误。

变量声明和定义的关系

C++支持 分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。为了支持分离式编译,C++语言将声明和定义区分开来。变量声明规定了变量的类型和名字,在这一点上定义与之相同,但是除此之外,定义还申请存储空间,也可能为变量赋一个初值。
    如果要声明一个变量而非定义它,就在变量名前添加关键字 extern ,而且不要显示的初始化变量:
extern int i;// 声明 i 而非定义 i
int j; // 声明并定义 j

任何包含了显示初始化的声明即成为定义。
extern double pi = 3.1416;// 定义
// 抵消了extern 的作用

变量只能被定义一次,但是可以被多次声明。

标识符

C++标识符由字母、数字、下划线组成,且必须以字母或下划线开头。长度没限制,但是大小写敏感。
用户自定义标识符不能连续出现两个下划线,也不能下划线紧连大写字母开头。定义在函数体外的标识符不能以下划线开头。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《C Primer》是一本针对C语言初学者的经典教材,第五版的第六章主要介绍了函数的基本概念和用法。 在第六章中,教材首先介绍了函数的定义和调用。函数是具有独立功能的代码块,可以通过函数名来调用。函数由函数头、参数、函数体和返回值组成。函数头包括函数类型、函数名和参数类型,参数用于接收传递给函数的值,返回值用于将结果返回给调用者。 接着,教材详细介绍了函数的参数传递方式,包括按值传递、按引用传递和按指针传递。按值传递是指将参数的值复制给形参,按引用传递是指将参数的引用传递给形参,而按指针传递是将参数的地址传递给形参。不同的传递方式在函数内部对参数进行操作时,会对应不同的结果。 此外,教材还讲解了函数的返回值和函数的调用顺序。函数的返回值类型由函数头中的类型确定,可以是任意类型。当函数需要返回多个值时,可以使用结构体或指针进行返回。函数的调用顺序决定了函数执行的顺序,即哪个函数先执行,哪个函数后执行。 在函数的实现过程中,教材介绍了函数的定义和声明、局部变量和全局变量、递归等内容。通过这些知识点的学习,读者可以了解到函数的具体细节和一些实践技巧。 总的来说,第五版的第六章通过清晰的语言和丰富的例子,循序渐进地讲解了函数的基本概念和用法。学完这一章,读者将能够理解函数的定义、调用、参数传递、返回值和实现等方面的知识,为之后的学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值