IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++慕课学习第三单元 -> 正文阅读

[C++知识库]C++慕课学习第三单元

C++慕课学习第三单元

1. 引用、空指针、及内存动态分配

Reference

定义 :A reference is an alias for another variable. (引用就是另一个变量的别名)

声明引用变量的方法

int x;
int&  rx = x;//本质上是被引用对象的类型使用&符
//-----------
或者

int x, &rx = x;

性质

  1. 通过引用所做的读写操作实际上是作用于原变量上。
  2. 引用必须在声明的时候初始化。
  3. 引用一旦初始化,引用名字就不能再指定给其他变量。

例子

//pass by reference
void swap(int& x,int& y)
{
int t;
t = x;	x = y;	y = t;
}
int main()
{
	auto a{5},b{10};
	cout << "Before: a = " << a <<"  b = " << b << endl;
	swap(a,b);
	cout<< "Now: a = " << a <<"  b = " << b << endl;
	return 0;
}
输出结果:输出结果:

Before: a=5 b=10

After:  a=10 b=5

补充

		int a { 0 }, b { 1 };
		int& r { a };  // 引用变量 r 在声明的同时就要初始化,r是a的别名
		 
		r = 42;  // 相当于 a = 42
		r = b;   // 相当于 a = b; 执行后 a 的值是1
		         // 此处不是让r变成b的引用
		         // 引用r声明并初始化后,r就不能再改为其它变量的引用
		int& r2 = a;  // 继续给a起别名
		int& r3 = r;  // 声明引用变量 r3,用r初始化
		              // 这个相当于 int& r3 = a; 因为 r 是 a 的别名
		//常量指针类型引用,前面的const不可省掉
		const char*  s  = "Hello";
		const char*& rs = s;

动态内存管理:分配/释放

  1. C++中通过运算符new申请动态内存
    new  <类型名> (初值) ;     //申请一个变量的空间
    new  <类型名>[常量表达式] ;   //申请数组
    
    	如果申请成功,返回指定类型内存的地址;
    	如果申请失败,抛出异常,或者返回空指针(nullptr)。(C++11)
    
    1. 动态内存使用完毕后,要用delete运算符来释放。
    delete   <指针名>;    //删除一个变量/对象
    delete []  <指针名>;     //删除数组空间
    

2.数据类型与转换,[C++]列表初始化

  1. 布尔数据类型(Boolean data type)

    C++语言在其标准化过程中引入了**bool**、**true**和**false**关键字,增加了原生数据类型来支持布尔数据。
    布尔类型的大小(所占的存储空间)依赖于具体的编译器实现。也可以用 sizeof运算符得到其占用的空间
    
    • 布尔类型的用途

      布尔数据类型主要与条件语句相关。条件语句用来更改程序控制流。

    • C++中的布尔类型

       C++ keyword:  bool,  true,  false
       例如:
       bool  isMyBook;
       bool  isRunning = {false};  //C++11 列表初始化方式
       bool  isBoy( );
        
       bool   hasLicense();
       bool   canWork();
       bool   shouldSort();
      
    • 布尔类型与整型的转换(Conversion between bool and int)

        转换规则:
        0  <--> false              // 整数0和布尔false互相转化
        true <--> 1                  // 布尔true转化为整数1
        non-zero <-->true     // 任意非0整数转化为布尔true
      
    • 关系运算得到布尔值

        关系运算(Relational Operation)包括:==, !=, <=, >=, <, >
        例如:
        int  a=0, b={1}; //C++11
        3 == a;
        b < a;
        3.2 >= b;
         
        if (3 == a) {
            // blah blah
        }
      
    • 逻辑运算得到布尔值

        逻辑运算(Logical Operation)包括:&&, ||, !
        int  a={0}, b{1}; //C++11
        a && b;
        b || 18;
        !a;
        while (!a) {	
            // blah blah
        }
      
    • 代码示例

      #include <iostream>
      int main() {
          bool isAlpha;
          isAlpha = false;    
          if (!isAlpha) {
             std::cout << "isAlpha=" << isAlpha << std::endl;
             std::cout << std::boolalpha <<					//换行必须明显,在逗号或运算符后
                    		"isAlpha=" << isAlpha << std::endl;//这个地方的引号对齐上一行的std
          }
          return 0;
      }
      
        运行结果:
        isAlpha=0
        isAlpha=false
        注意:
      
    • 编码规范

        26. The prefix is should be used for boolean variables and methods.
        26. 布尔变量/函数的命名应使用前缀“is”
        例如:isSet, isVisible, isFinished, isFound, isOpen
        
        39. The incompleteness of split lines must be made obvious.
        39. 断行必须很明显。
        在逗号或运算符后换行,新行要对齐
      
  2. 列表初始化(List Initialization)

    • Before C++11 (C++11标准之前的初始化方法)

      int x = 0;
      int y(2);
      char c('a');
      int arr[] = { 1,2,3 };
      char s[] = "Hello";
      C++11 also support the old ways (C++11标准仍然支持旧的初始化方法)
      
    • List Initialization (列表初始化)

      • List initialization is a new feature for C++11 (列表初始化是C++11的一个新特性)
      • List: braced-init-list (“列表”是用花括号括起来的一(些)值)
      • 列表初始化的两个分类
        1. Direct list initialization (直接列表初始化)
        2. Copy list initialization (拷贝列表初始化)
        		      //直接列表初始化)
        /* Variable initialization */ 
        int x{}; // x is 0; 
        int y{ 1 }; // y is 1; 			
        /* Array initialization */ 			
        int array1[]{ 1,2,3 }; 			
        char s1[ 3 ] { 'o', 'k' }; 			
        char s3[]{ "Hello" }; 				
        		 			 
        //拷贝列表初始化			
        /* Variable initialization */ 			
        int z = { 2 }; 			
        /* Array initialization */ 			
        int array2[] = { 4,5,6 }; 			
        char s2[] = { 'y','e','s' }; 			
        char s4[] = { "World" };			
        char s5[] = "Aloha"; // Omit curly braces (省略花括号)
        
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:26:28  更:2021-07-31 16:26:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 14:38:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码