C数组

数组

    数组是用来存储一组数据的容器. 用于把同一类型的一组数据统一管理起来.

    特点:

    1.数组必须要定义长度(正整数),定义时可初始化(长度必须是常量)或之后单独初始化.

    2.数组是有序的.每个数据都有角标.从0开始分配.角标不能>=数组长度.类型一致.

    3.数组有地址(数组名),里面的元素也有地址.数组当参数时(长度可省)传递的是地址.

    4.数组当参数传递时是指针类型.所以如果需要用数组长度要额外传递.

 
 
  1. 定义: 数据类型 数组名[长度(数量)] ;
  2.     int arr[3];
  3.    初始化:类型 数组名[(长度)]:={元素1,元素2,…}
  4.    int arr[3]={70,80,90};
  5.    
  6.    初始化的第二种方式,单独初始化
  7.    int arr2[3];
  8.    //    arr2={70,80,90};//错误
  9.    arr2[0]=70;
  10.    arr2[1]=80;
  11.    arr2[2]=90;
  12.    初始化的第三种方式,省略长度
  13.    int arr3[]={70,80,90};
  14.    //    数组必须要定义长度(正整数)
  15.    
  16.    //    定义时可初始化(长度必须是常量)或之后单独初始化
  17.    int count=3;
  18.    //    int arr5[count]={70,80,90};//错误
  19.    int arr5[count];
  20.    arr5[0]=70;
  21.    arr5[1]=80;
  22.    arr5[2]=90;
  23.    
  24.    //    如果省略长度,那么表示,后面初始化几个元素,长度就为几.
  25.    int arr6[3]={1,2};
  26.    arr6[2]=3;
  27.    int arr7[]={1,2,3};
  28.        arr7[2]=3;//错误
  29.    
  30.    //    数组第一个元素的地址就是这个数组的地址.二者是一致的
  31.        printf("%p---%p\n",arr7,&arr7[0]);
  32.        printf("---%lu\n",sizeof(arr7));//arr7代表是整个数组. //12
  33.    //    计算一个数组的长度
  34.    int size=sizeof(arr7)/sizeof(int);
  35.    printf("arr7的长度是=%d\n",size);                      //3

二维数组

    二维数组是用来存储一组数组的容器. 用于把同一类型的一组数组统一管理起来.

    特点:

        1.与数组基本一样.但传递子数组时传递的是地址.

        2.子数组数量控制行数,单个子数组长度控制列数.

        3.每个子数组类型及长度一致.

     定义:  类型 数组名[数组的数量][子数组的长度] ;    

    //第一种方式:类型 数组名[数组的数量][子数组的长度] :={{数组1}, {数组2},…}

    int arr[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};

    //第二种方式:

    int arr1[3][4];

    arr1[0][0]=1;

    arr1[0][1]=2;

    arr1[0][2]=3;

    arr1[0][3]=4;

    

    arr1[1][0]=1;

    arr1[1][1]=2;

    arr1[1][2]=3;

    arr1[1][3]=4;

    

    arr1[2][0]=1;

    arr1[2][1]=2;

    arr1[2][2]=3;

    arr1[2][3]=4;



指针

    指针具有两层含义:一是指一种数据类型.二是指一种保存地址的变量.

    定义:int *p 表示定义一个能存int类型地址的指针变量,名字叫p

    赋值:指针变量名=指针(地址)。指针获取方法(&变量名)

    指针本身也有地址。指针定义后,自身地址不变,但里面存的地址可以变化。

    &p表示指针自身地址,而p表示指针存的地址,*p表示指针所存地址的内存空间。

    指针不初始化赋值不要使用。未赋值前地址是随机的。未赋值不可以用*p。    

    *修饰什么,就表示是什么的指针。判断原则:先确定变量的类型。(根据符号优先级)

全局变量

    在所有函数外部定义的变量,称为全局变量。.

    用于存储一个需要长期存于内存,并需要改变的变量.

    跟普通变量没区别,只是位置在所有函数之外.

    当需要定义一个随程序一直存于内存中,并可以被其它函数共享的变量时候.

  特点:

     1.生命生期跟随程序.程序启动创建,程序退出其才会销毁

     2.作用域是其所在位置之下的所有函数,都可以共享并改变.

     3.变量的使用遵循就近原则如果函数内有同名变量,那么用函数自已的.

     4.如果没有初始化赋值,默认值是0;


结构体

    是一种数据类型.是构造类型.里面可以存不同类型的数据.

    用于封装不同的数据类型到一个结构中.方便使用.

    定义:1.定义结构体类型 struct 结构体类型{数据类型1 名称;数据类型2 名称;…};

              2.定义结构体变量及赋值: struct 结构体类型 变量名={数据1,数据2….};

        取值:变量名.结构体元素变量名;  赋值:变量名.结构体元素变量名=新值;

    当需要把相关联的不同数据类型封装起来一起使用的时候.

   特点:

    1.可在定义结构体类型时同时定义结构体变量名,可定义匿名类型结构体;

    2. 同一作用域内不可重复定义结构体类型和结构变量.匿名类型结构体除外;

    3.可在函数内也可在函数外,效果及用法类似于局部变量和全局变量.也可嵌套定义.

    4.可同时在函数内外定义同一个类型,使用同样遵循就近原则,结构体变量也是如此.



枚举

    枚举是一种数据类型.称为枚举类型.是构造类型的一种,里面存的都是有别名的整型常量.

    可以把多个整型常量以别名的形式封装成一个整体,便于别的变量识别并取值使用.

    当一个变量只有固定的多个int取值范围时使用.

   特点:

        1.枚举类型只能是int值,且不能直接用int常量,需要用别名(建议全部大写)

        2.如果不设定值,那么默认第一个元素是0,以此类推;

        3.同一个作用域内不能出现重复的元素.不同的枚举类型也不行.

  
  
  1.    /*
  2.     1.定义枚举类型 enum 枚举类型{元素1 , 元素1 , …};
  3.     或{元素1=0,元素2=1,}
  4.     */
  5.    enum Day{
  6.        MONNING,//0
  7.        NOON,//1
  8.        NIGHT,//2
  9.    };
  10.    //2.定义枚举变量及赋值: enum 枚举类型 变量名=对应枚举里的一个元素名;
  11.    enum Day daystatus=MONNING;
  12.    // 取值:变量名=枚举元素名;
  13.    daystatus=MONNING;
  14.    printf("daystatus=%d\n",daystatus);
  15.    daystatus=NOON;
  16.    printf("daystatus=%d\n",daystatus);
  17.    daystatus=NIGHT;
  18.    /*用普通变量*/
  19.    int status=0;//这个0表示早上
  20.    status=1;//如果等于1表示中午
  21.    status=2;//如果等于2表示晚上.
  22.    printf("daystatus=%d\n",daystatus);
  23.    /*注意:枚举一旦类型定义成功之后里面的数据常量不能再更改*/
  24.    int a;//0表示关 1表示开,没有其它的取值
  25.    a=1;
  26.    a=0;
  27.    // 等效于:
  28.    enum Status{
  29.        CLOSE,
  30.        OPEN,
  31.    } nowStatus;
  32.    //3.同一个作用域内不能出现重复的元素.不同的枚举类型也不行.
  33.    enum Status2{
  34.        CLOSE,
  35.        OPEN=0,
  36.    } nowStatus;
  37.    /*
  38.     enum Status{
  39.     CLOSE=1.2,//错误
  40.     1,//错误
  41.     } nowStatus;
  42.     */
  43.    //nowStatus=OPEN;
  44.    nowStatus=CLOSE;
  45.    printf("a=%d---nowStatus=%d\n",a,nowStatus);



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值