C++快速复习-复合数据类型

数组(type x[]) 

  • int a[2]; a[1] = 1; a[2] = 2;

  • int a[2] = {1, 2 }

  • int a[] = {1 ,2 ,3, 5}

字符串(string)

  • char a[3] = { 'a', 'b', '\0'}; // \0 字符串的结尾 默认 

  • char a[3] = "ab";  // 需要时刻注意字符串多出一个位置给'\0'

  • char a[] = "abcdef";  // 长度自适应分配

  • 字符输入

    • cin.getline()

    • cin.get().get() cin.get() 代表读取新的一行(即运行新行输入)

  • 字符串 -- #include<cstring>

    • string a = "dhjkashfkf";

    • strcpy(a,b) //字符复制

    • strcat(a,b) // 字符拼接

结构体(struct)

需要注意结构体的定义有效范围

  • 若定义在function内部则有效范围为该函数内

  • 若定义在main() 函数外 也就是定义在头文件下面 则可以多个函数使用该类型

    struct inflatable{
	char name[20]; 
  	int a;  
    string b;};
    //声明
    inflatable oneStruct ={
        "NooneDo",
         13,
         "LoveYourself"};
    //访问内容
    oneStruct.name //oneStruct.a oneStruct.b
    //你也可以声明结构化数组访问
    inflatable listStruct[10]  // 10个结构体
    //访问,比如:
    listStruct[2].a

共用体(union)

不怎么常用的类型,与strcut类型但不同,它每次值可以存储一个数据

    union oneUnion{
	int a;
    short b;
    double c;};
    oneUnion x;
    x.a = 4;
    cout << x.a <<endl;
    x.b = 2 ;
    cout << x.b <<endl;
    cout << x.a <<endl; // print 2 x.a = 4 is lost

枚举(enum)

枚举类型默认为int,如果没有指定的值,则会从0开始给值依次+1

    enum oneEnum { a, b, c, d, e} ; // Default int, assigned from 0
    cout << a << b << c << endl; //012
    oneEnum f;
    f = a; // you can let f = a  //one of {a,b,c,d,e}
    // f cann not = 12 or a+b because the type of a,...c is int, but f is enum
    f = oneEnum(15); // you can perfrom type conversion
    // otherwise, you can specify the value the corresponding variable
    enum oneOtherEnum { aa=1, bb=100, cc=13, dd=14, ee=15} ;
    cout << aa << bb << cc << endl; //110013

指针(& and *)

经典困难部分({{{(>_<)}}})

首先你需要明确一定指针本质也是一个变量,但是其存储的是值的存储地址而不是某个值。

  • & --- 取地址运算符号 (我已经习惯称之为取地址符号 另外一种也叫(引用)) * ----取值运算符 (间接取值 解除引用)

  • 一定需要注意的是---------声明了一个指针,一定需要其赋值(指向)

    int a = 3; //声明一个a
    int * p; // 定义一个指针 
    p = &a ; //指向 a的地址 
    //那么 *p == a 就是拿到a地址的中值
    *p += 1 ;
    cout << *p << endl; //4
    a += 1;
    cout << a << endl; //4
    /***
     * 即 int a = 3;
     *    int * p = &a;
     * 使得 a 与 *p 两个变量等价
    ***/
	/*
	 * 如果执行初始化 int a = 3; int * p = &a ;
	 * 你可以理解为:
	 *			先将 a的地址&a赋值给 p 然后 p中内容存储为 3;
     *			即 *(p = &a) 先执行内部 
     *    int a = 3;
   	 *	  cout << *(&a) <<endl; 输出 3
	 */ 

内存分配(new)

  • new 可以为你找到一个你需要的数据类型的地址,并指向;返回该内存的地址

  • typeName * pointer_name = new typeName;

  int * p = new int; //new 一个int的对象
  *p = 8;
  cout << p <<endl; // 地址
  cout << *p <<endl; // 数值 8

内存释放(delete)

  • 使用指针new对象以后,记得释放

  • 但是delete只能释放new创建的指针

    int * p = new int; //new 一个int的对象
    *p = 8;
    // cout << p <<endl; // 地址
    // cout << *p <<endl; // 数值 -8
    delete p;

    // int a = 8;
    // int * q = &a;
    // delete q; // 已经赋值的指针,无法执行delete 

    int * qp;
    delete qp; // 空指针可以被delete删除,可以执行delete

新建\\删除动态数组

  • typeName * pointer_name = new typeName [n];

    int * p = new int [3]; //new 一个int [] 的对象
    *p = 1, *(p+1) = 2, *(p+2)=3; // 第一种方式进行赋值 p+1 可以认为地址向前移动一个int单元
    cout<< p[2] <<endl; // 3

    p[0] = 4, p[1] = 5, p[2] = 6; // 第二钟方式允许 我们直接与数据一致的方式进行赋值
    cout<< p[2] <<endl; // 6

    delete [] p ; // 删除动态数组对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值