04-布尔类型和引用

注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。

测试环境:Ubuntu 10.10

GCC版本:4.4.5

 

一、布尔类型

1)C++中的布尔类型

    -    C++在C语言的基础类型系统之上增加了bool

    -    C++中的bool可取的值只有truefalse

    -    理论上bool只占用一个字节

 

        注意:

        true代表真值,编译器内部用1来表示

        false代表非真值,编译器内部用0来表示

 

二、布尔类型的值

1)bool类型只有true非0)和false0)两个值

2)C++编译器将非0值转换为true0值转换为false

            下面的代码输出什么?

bool b = 0;
printf("b = %d\n",b);    //0
b++;
printf("b = %d\n",b);    //1
b = b - 3;
printf("b = %d\n",b);    //1

 

编程实验
布尔类型的使用
4-1.cpp
#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = false;
    int a = b;
    
    printf("sizeof(b) = %d\n", sizeof(b));//1
    printf("b = %d, a = %d\n", b, a);     //b = 0,a = 0
    
    b = 3;
    a = b;
    
    printf("b = %d, a = %d\n", b, a);     //b = 1,a = 1
    
    b = -5;
    a = b;
    
    printf("b = %d, a = %d\n", b, a);     //b = 1,a = 1
    
    a = 10;
    b = a;
    
    printf("a = %d, b = %d\n", a, b);     //a = 10,b = 1
    
    a = 0;
    b = a;
    
    printf("a = %d, b = %d\n", a, b);     //a = 0,b = 0
    
    return 0;
}

操作:

1) g++ 4-1.cpp -o 4-1.out编译正常,打印结果:

sizeof(b) = 1
b = 0, a = 0
b = 1, a = 1
b = 1, a = 1    
a = 10, b = 1  
a = 0, b = 0       

分析:b值只有0(假)和1(真)。

 

三、布尔类型

1)布尔类型是C++中的基本数据类型

    -    可以定义bool类型的全局变量

    -    可以定义bool类型的常量

    -    可以定义bool类型的指针

    -    可以定义bool类型的数组

    -    ……

 

四、三目运算符

1)C++对三目运算符进行了升级

                下面的代码正确吗?

int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b = %d\n",a,b);
gcc编译错误
g++编译正确
打印结果:
a = 3, b = 2(和C语言不同)

2)C语言中的三目运算符返回的是变量值

    -    不能作为左值使用

3)C++中的三目运算符可直接返回变量本身

    -    既可作为右值使用,又可作为左值使用

 

            注意:

            三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。(不能混搭使用)

   

思考:

        C++对三目运算符做了怎样的升级?

        这种升级的意义是什么?

        C++中三目运算符可以直接返回变量引用(即,变量本身)。后边有答案。

 

五、C++中的引用

1)变量名回顾

        -    变量是一段实际连续存储空间的别名

        -    程序中通过变量来申请并命名存储空间

        -    通过变量的名字可以使用存储空间

 

        问题:

        一段连续的存储空间只能有一个别名吗?

2)在C++中新增加了引用的概念

    -    引用可以看作一个已定义变量的别名

    -    引用的语法:Typename = var;

int a = 4;
int& b = a;     //b为a的别名
b = 5;          //操作b就是操作a

    注意:

    普通引用在定义时必须用同类型的变量进行初始化。

实例分析
引用初体验
4-2.cpp
#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    int& b = a;
    
    b = 5;
    
    printf("a = %d\n", a);    //5
    printf("b = %d\n", b);    //5
    printf("&a = %p\n", &a);  
    printf("&b = %p\n", &b); 
    
    return 0;
}

操作:

1) g++ 4-2.cpp -o 4-2.out编译正常,运行程序:

a = 5
b = 5  
&a = 0xbffeb2a8    
&b = 0xbffeb2a8    

分析:引用后,变量a和b内存地址相同,内存中的数据修改,a、b对应值都会改变。

 

3)C++对三目运算符做了什么?

    -    当三目运算符的可能返回都是变量时返回的是变量引用(即变量的本身)

    -    当三目运算符的可能返回中有常量时返回的是值

int a = 1;
int b = 2;

(a < b ? a : b) = 3;    //正确,返回a或b的引用,可作为左值
(a < b ? 1 : b) = 4;    //错误,返回1或b的值,不能作为左值

 

小结

1)bool类型是C++新增加的基础类型

2)bool类型的值只能是truefalse

3)C++中的三目运算符可作为左值使用

4)C++中的引用可以看作变量的别名来使用

5)三目运算符的可能返回都是变量时返回的是引用 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值