C++第4课:布尔类型+三目运算+引用

本文学习自 狄泰软件学院 唐佐林老师的 C++课程


实验1 :bool 类型使用注意1
实验2 :bool 类型使用注意2
实验3:C 中 三目运算符不可作为左值使用
实验4 :C++ 中 三目运算符可作为左值使用
实验5 :C++中 三目运算符可能返回的值中,有一个是常量值,不能作为左值使用
实验6 :引用的使用
实验7 :引用的使用- 用同类型变量初始化
实验8 :引用的使用- 定义引用时必须要初始化
实验9 :引用的使用- 不能用字面常量初始化引用


在这里插入图片描述

在这里插入图片描述

打印:
0
1
1


实验1 :bool 类型使用注意1

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = 0;
    printf("b = %d\n", b);
 	b++;
     printf("b = %d\n", b);
  	b = b-3;
  	 printf("b = %d\n", b);
    return 0;
}

在这里插入图片描述


实验2 :bool 类型使用注意2

#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);//0,0
    
    b = 3;
    a = b;
    
    printf("b = %d, a = %d\n", b, a);//1,1
    
    b = -5;
    a = b;
    
    printf("b = %d, a = %d\n", b, a);//1,1
    
    a = 10;
    b = a;
    
    printf("a = %d, b = %d\n", a, b);//10,1
    
    a = 0;
    b = a;
    
    printf("a = %d, b = %d\n", a, b);//0,0
    
    return 0;
}

在这里插入图片描述

C++ 布尔类型只是对C的补充,C语言中没有具体的布尔这种基础类型,而是用int类型代替布尔类型,虽然说可以,但是不严谨,所以C++中的第一个加号就是对类型的加强。所以布尔类型出现在C++中,是理所当然的。

在这里插入图片描述

在这里插入图片描述

在C语言中,三目运算符不能出现在 赋值符号的左边,在C++中呢?

实验3 在C语言中,三目运算符不能出现在 赋值符号的左边


C语言中
test.c

#include <stdio.h>

int main(int argc, char *argv[])
{
	int a = 1;
	int b = 2;
	(a < b ? a : b) = 3;
	prtitf("a = %d\n, b=%d\n", a, b);
    return 0;
}

在这里插入图片描述
报错,三目运算符不能出现在 赋值符号的左边

实验4 :C++中 三目运算符可作为左值使用
test.cpp

#include <stdio.h>

int main(int argc, char *argv[])
{
	int a = 1;
	int b = 2;
	(a < b ? a : b) = 3;
	prtitf("a = %d\n, b=%d\n", a, b);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

实验5 :C++中 三目运算符可能返回的值中,有一个是常量值,不能作为左值使用
test.cpp

#include <stdio.h>

int main(int argc, char *argv[])
{
	int a = 1;
	int b = 2;
	(a < b ? a : 2) = 3;
	prtitf("a = %d\n, b=%d\n", a, b);
    return 0;
}

在这里插入图片描述
报错,因为三目运算符可能返回的值中,有一个是常量之,不能作为左值使用。

思考:C++对三目运算符做了怎样的升级?这种升级的意义是什么呢?

C++ 中如果说三目运算符所有可能的返回都是变量的时候,那他返回的就是变量本身!

在这里插入图片描述

在这里插入图片描述

实验6 :引用的使用
test.cpp

#include <stdio.h>

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

在这里插入图片描述


实验7 :引用的使用- 用同类型变量初始化
test.cpp

#include <stdio.h>

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

在这里插入图片描述
报错,引用类型不匹配,C++是强类型的语言。

实验8 :引用的使用- 定义引用时必须要初始化
test.cpp

#include <stdio.h>

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

在这里插入图片描述
报错:引用没有初始化!!


实验9 :引用的使用- 不能用字面常量初始化引用
test.cpp

#include <stdio.h>

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

在这里插入图片描述报错:b必须是另一个变量的别名,1是一个字面常量,也不需要别名。

在这里插入图片描述

在这里插入图片描述

发布了200 篇原创文章 · 获赞 100 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/104086877