黑马程序员-数据类型、变量作用域和数据结构的学习笔记

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、基本数据类型

1.int

1> long int、long:8个字节  %ld

2> short int、short:2个字节 %d %i

3> unsigned int、unsigned:4个字节 %zd

4> signed int、signed、int:4个字节 %d %i

2.float\double

1> float :4个字节 %f

2> double:8个字节 %f 

3.char

1> 1个字节 %c %d

2> char类型保存在内存中的是它的ASCII值'A' --> 65

 

二、根据变量的作用域,可以分为:

 1.局部变量:

  1> 定义:在函数(代码块)内部定义的变量(包括函数的形参)

  2> 作用域:从定义变量的那一行开始,一直到代码块结束

  3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收

  4> 没有固定的初始值

 

 2.全局变量

  1> 定义:在函数外面定义的变量

  2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)

  3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁

 4> 默认的初始值就是0

 

二、构造类型

1.数组

1> 只能由同一种类型的数据组成

2> 定义:数据类型 数组名[元素个数];

2.结构体

1> 可以由不同类型的数据组成

2> 先定义结构体类型(例如struct Person),再利用类型定义变量名

注意:数组和数据结构都只能在定义的时候赋初值,否则会报错。例如:struct Person P2; P2={1,1,1};是错的,数组类似intages[3];ages={1,1,1}。也是错的。

数据结构其实跟数组很相似,在赋值的时候可以不按顺序赋值,例如对结构体不按顺序赋初值struct Person P={.name=”rose”,.heigh=1.65,.ages=20};

 

3>结构体内存:

     结构体在定义类型的时候并没有分配内存,因为还没定义结构体变量。

     例如:struct Person{ int ages,double heiht,char *name};

     Struct Person P={25,1.5,”joy”};(为变量P分配内存空间,且空间的大小为里面元素的数据类型和);

结构体在分配内存空间的时候有一个补齐(或对齐)算法。也就是内存空间的大小一定是结构体内最大成员字节数的倍数。计算机采用这种算法主要是提高运算速度

4>结构体数组:

例题:

<span style="font-size:18px;">int main()
{
     struct RankRecord
     {
        int no; // 序号  4
        int score; // 积分 4
        char *name; // 名称 8
     };
     struct RankRecord records[3] =
     {
        {1, "jack", 5000},
       
        {2, "jim", 500},
       
        {3, "jake",300}
     };
     records[0].no = 4;
     // 错误写法
     //records[0] = {4, "rose", 9000};
   
     for (int i = 0; i<3; i++)
     {
       printf("%d\t%s\t%d\n", records[i].no, records[i].name,records[i].score);
     }
    //printf("%d\n",sizeof(records));
     return 0;
}</span>


5>指针指向结构体的内存方式如下图:


利用指针调用结构体的属性有以下三种方法:

struct Student

    {

        int no;

         int age;

    };

  // 结构体变量

    struct Student stu = {1, 20};  

     // 指针变量p将来指向struct Student类型的数据

    struct Student *p;


    // 指针变量p指向了stu变量

    p = &stu;

    p->age = 30;


    // 第一种方式

    printf("age=%d, no=%d\n",stu.age, stu.no);


        // 第二种方式

        printf("age=%d, no=%d\n",(*p).age, (*p).no);

   

        // 第三种方式

        printf("age=%d, no=%d\n",p->age, p->no);

总结:结构体就像面向对象一样,它是不同基本数据类型的集合,数据结构用途广泛,必须理解掌握。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值