《后台开发核心技术与应用实践》第一章 读书笔记

《后台开发核心技术与应用实践》第一章 读书笔记

第一章 C++编程常用的技术

  1. 第一个C++程序

    • #include<>与#include” “的区别是:#include<>用来包含系统提供的头文件#include” “用来包含程序员自己编号的头文件
    • 主函数是所有C++程序的运行起始点。不管它的位置在哪里,主函数的带啊总是在程序开始运行时第一个被执行
  2. 函数

    • 在定义函数时函数名后面括号中的变量名是形参,调用函数时,函数名后面的括号中的参数是实参

    • 函数重载

      C++允许用同一函数名定义多个函数,这些函数必须参数个数不同或者类型不同,这就是函数重载

    • 函数模板

      template<typename T>
      
  3. 数组

    • 字符数组:就是一个用来存放字符数据的数组

      strlen(str)与sizeof()的区别:

      1. strlen(str)是函数,只有在运行时才能计算,参数必须是字符型指针(char*),必须是’\0’结尾。当数组名作为参数传入,实际上数组已经退化成指针,它的功能是返回字符串的长度
      2. sizeof()是运算符,不是一个函数,在编译时计算,用于计算数据空间的字节数。sizeof不能用来返回动态分配的内存空间大小。sizeof常用于返回类型和静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
  4. 指针

    • int p1=1;			//p1是一个普通的整型变量
      int *p2;			//p2是一个指针
      p2=&p1;				//把p1的地址赋值给p2
      
    • 数组与指针

      数组名代表数组第一个元素的地址。

      int *p;
      int a[10];
      

      p=a等价于p=&a[0],可以通过对p、a的偏移来访问数组元素,*(p+i) *(a+i)。也可以通过数组下标a[i]这种形式来访问各个元素。

    • 字符串与指针

      字符串指针用于存放字符串的首地址,可以改变指针使它指向不同的字符串,但不能改变所指向的字符串常量。字符串数是偶遇若干个数组元素组成的,每个元素中存放字符串的一个字符,在定义一个字符数组时,编译后就会分配一个内存单元,每个元素都有确定的地址。

    • 函数与指针

      函数指针是指向函数的指针变量。可以实用指针调用函数。

      int func(int a);			//声明一个函数
      int (*f) (int a);			//声明一个函数指针
      f=&func;
      
  5. 引用

    int a;
    int &r=a;
    

    引用r是变量a的引用,也就是别名。**a和r占用内存的同一个存储单元,具有同一地址。**在声明引用变量时,必须进行初始化,表示它代表哪一个变量。

    • 引用作为参数

      使用引用传递函数参数时,内存中没有产生实参的副本,是直接对实参进行操作。使用一般变量进行传递参数时,发生函数调用,需要给形参分配存储单元,形参是实参的副本,如果传递的是对象,还要调用拷贝构造函数。

    • 常引用

      int a;
      const int &r=a;
      

      常引用不能通过引用对目标变量的值进行修改。

  6. 结构体、公用体、枚举

    • 结构体

      struct 结构名{
          数据类型 成员名;
          ...
      };
      

      用 . 来引用结构体变量中的成员。

    • 公用体

      union 公用体类型名{
          数据类型 成员名;
          ...
      };
      

      一个公用体的数据共享一段内存,在不同的时间保存不同的数据类型和长度变量,同一时间只能存储其中一个成员变量的值。

      可以用union判断系统是big endian 还是little endian

      #include<iostream>
      using namespace std;
      union TEST{
          short a;
          char b[sizeof(short)];
      };
      int mian(){
          TEST test;
          test.a=0x0102;
          if(test.b[0]==0x01&&test.b[1]==0x02){
              cout<<"big endian"<<endl;
          }
          else{
              cout<<"little endian"<<endl;
          }
          return 0;
      }
      
    • 枚举

      只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。显示赋值的时候接下来的枚举子取值是前面一个枚举子的取值+1.

    • 结构体、公用体在内存单元占用字节数的计算

      这里要注意共用体内变量的默认内存对齐方式必须以最长的来对齐。

在这里插入图片描述

  1. 预处理

    • 宏定义

      #define 宏名 字符串
      

      在宏定义的使用中,替换字符串是一个表达式的时候需要加括号。否则进行简单替换很容易产生误解。

在这里插入图片描述

  • do…while(0)

    #define Foo(x) do{
    	statement one;
    	statement two;
    }while(0)
    

    这样在进行宏展开时就不会变成两个部分了。

  • 条件编译

    #ifdef 标识符
    	程序1
    #else
    	程序2
    #endif
    
  • extern"C"

    在C/C++混合编程的环境下,这里的作用就是告诉编译器这段代码要用C标准编译,尽可能的保持C++和C的兼容性。

发布了28 篇原创文章 · 获赞 34 · 访问量 2683

猜你喜欢

转载自blog.csdn.net/weixin_44289697/article/details/104282257