【构造数据类型】 01枚举、数组、结构、联合、指针

构造数据类型——枚举、数组、结构、联合、指针

枚举类型

  • enum <枚举类型名> {<枚举值表>};
    <枚举值表>为用逗号隔开的若干个整型符号常量。

  • E.G. enum Day {SUN,MON,TUE,WED,THU,FRI,SAT};

  • 默认情况下,第一个枚举值为0,其它的值为前一个值加1。

  • enum Day {SUN,MON,TUE,WED,THU,FRI,SAT};
    Day d1;
    d1 = SUN;
    d1 = 1;//报错 不能把一个整型值赋值给枚举类型的变量
    //但是可以把一个枚举值赋值给一个整型变量
    
    d1 = d1+1; //error 因为d1+1是整型
    d1 = (Day) (d1+1);
    
    cin >> d1; //Error
    cout << d1; //OK,
    //不能对枚举类型的值直接进行输入,但可以进行输出
    

数组类型

一维数组
  • typedef <元素类型> <一维数组类型名>[<元素个数>];
    <元素类型>为任意C++类型(void除外)
    <元素个数>为整型常量表达式 typedef int A[10];
  • 初始化表中的值可以少于数组元素个数,不足部分的数组元素初始化成0
  • int c[]={1,2,3}; //隐含着c由三个元素构成
  • 不能对两个数组进行整体赋值
  • 函数传递:int max(int x[],int num) num是个数,默认传递的是首地址,所以形参是能改变实参的值的。
  • 字符串
    • char s[10]; 长度为9的字符串 最后有一个\0
    • strlen(s);
    • str[i]-‘0’
    • 初始化:
      • char s[10]={‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’};
        char s[10]={“hello”};
        char s[10]=“hello”;
        char s[]=“hello”;
    • strlen strcpy strcmp 之类的函数
二维数组
  • typedef <元素类型> <二维数组类型名>[<行数>][<列数>];
    <元素类型>为任意C++类型(void除外)
    <行数>和<列数>为整型常量表达式

  • 初始化:

    • int a[2][3]={{1,2,3},{4,5,6}};
      int a[2][3]={1,2,3,4,5,6};
      int a[2][3]={1,2,3,4}; 以上初始化按照数组的行来进行
      int a[2][3]={{1,2},{3,4}};每一行的前2个分别初始化为1、2和3、4,其它为0
      int a[][3]={{1,2,3},{4,5,6},{7,8,9}}; 行数为3
  • 函数传递:

    • 被调用函数的形参应为不带数组行数的二维数组定义及其行数。例如:
      int sum(int x[][5], int lin)
    • 降为一维:int sum(int x[], int num)
      • a[10][5] sum(a[0],10*5)
结构类型
  • 定义:struct <结构类型名> {<成员表>};

  • 初始化:Student some_student={2,“李四”, FEMALE,{1970,12,20},“北京”, MATHEMATICS}; 依次进行,但是在定义一个结构类型时,不能对其成员进行初始化

  • 访问:<结构类型变量>.<结构成员名>

  • 结构类型的名字可以与同一作用域中的其它非结构类型标识符相同

  • 名表:

    • 一个由一系列名字及其相关信息所构成的表

    • 可以用一个一维数组来表示,每个元素用一个结构来表示

    • const int LEN=20;
      const int T_LEN=100;
      struct TableItem
      { char name[LEN];
      ...... //其它信息
      };
      TableItem name_table[TLEN];
      
    • 名表查找是指根据某个名字在名表中查找与该名字相关的信息。

      • 顺序查找/折半查找(二分法)
联合类型
  • 用一个类型表示多种类型的数据,只占用最大元素的空间

  • 分阶段地把它作为不同的类型来使用

  • 给一个联合类型的变量赋了一个某种类型的值之后,如果以另外一种
    类型来使用这个值,将得不到原来的值。

  • union A
    { int i;
      char c;
      double d;
    };
    A a;
    a.i = 1; //给变量a赋一个int型的值
    ... a.i ... //把a当作int型来用
    a.c = 'A'; //给变量a赋一个char型的值
    ... a.c ... //把a当作char型来用。
    
  • 可利用联合类型来实现多种数据共享内存空间

指针类型
  • typedef <类型> *<指针类型名>;

  • int* p,q; //p为指针变量,q为int型变量

  • int *p=&x; 指针存的是内存地址

  • (*<指针变量>).<结构成员>或●<指针变量>-><结构成员>

  • 该操作通常用于以指针方式来访问数组元素。例如:

    int a[10];
    int *p;
    p = &a[0]; //或 p = a;
    //访问数组a的元素可采用:
    ● a[0]、a[1]、...、a[9]
    ● *p、*(p+1)、...、*(p+9)
    ● p[0]、p[1]、...、p[9]
    
  • 两个同类型的指针相减,实际结果由指针所指向的类型来定。

  • int a[6];
    int *p = &a[0];
    int *q = &a[2];
    cout << q-p << endl; //输出2
    
  • 同类型的指针比较:比较它们所对应的内存地址的大小

  • 特殊的输出:

    char str[]="ABCD";
    char *q=&str[0];
    cout << *q; //输出q指向的字符:A
    cout << q; //输出q指向的字符串:ABCD
    cout << (void *)q
    
  • int max(int x[],int num)(x[i])//int max(int *x,int num)*(x+i)

  • 指向常量的指针: 自身可以改变,但是指向的东西的值不能

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值