• C语言中数据类型对变量的作用


    C语言中数据类型对变量的作用

    知识点

    1.C语言对地址的封装(通过变量访问内存)
    (1)int a; 把变量a和某个地址绑定,当编译器看到int a这句话时,第一步:通过int确定要分配的变量的内存地址的大小,并记录该地址,第二步:看到a这个变量名,把刚刚记录下来的地址和变量a绑定起来,以后要找某一个地址的内容时就找与之对应的变量,这样一来,对于我们来说,在使用数据的时候不用记住哪一个数据存放在哪一个地址里面了,只需要找相应变量即可。在汇编语言里面没有这样的封装,所以使用起来很麻烦。

    (2)数据类型的作用: 分配内存的大小和解析(存储)方式
        不同的变量占用的内存大小是不一样的,而内存是连续的,怎么划分取决于数据类型和其他管理方式(堆、栈等)。举例:int a=110;float a=3.14;编译器怎么想?当编译器看到int a=110;时,第一步:看到int 得知我要存储的数据是整形的,于是给它分配四个字节内存,第二步被存储的数据a=110;然后把110按照int所规定的方式把110存储到分配的四个字节中,当编译器看到float a=3.14;时,第一步:看到float 得知我要存储的数据是实型的,于是给它分配八个字节内存,第二步:被存储的数据a=3.14;然后把3.14按照float所规定的方式把3.14存储到分配的八个字节中。

    (3)(int)100和(int*)100有什么区别?
        首先都代表是强制类型转换,当编译器看到(int)100时,编译器怎么想?第一步:看到括号里面有个数据类型,知道这是一个强制类型转换,知道了要把后面的地址转换成int类型的,因为int类型的变量占4个字节,所以要把后面的地址转换成连续的四个字节,第二步:看被强制转换的地址是谁,一看是内存地址100,是一个字节。要补齐四个字节,于是把内存地址为100、101、102、103这四个地址存储的数据按照int类型的存储方式进行读写。
        再来看(int*)100;第一步:编译器看到括号带有类型,知道这是一个强制类型转换,第二步:括号里面是一个int*类型的指针,再看指针的地址是100,于是把100号内存地址以及后面连续的四个字节(100、101、102、103)存放的数据(假设是200)当成一个指针,该指针指向了一个地址(200号),再把200号地址里面的数据按照int类型的解析方式进行解析,也就是把200、201、202、203这四个地址当做存放int类型变量的内存。
        
    (4)函数名的含义:函数名的本质也是一个地址,代表一段代码的首地址    
    (5)    int a[10];  //数组名绑定的是数组的首元素的首地址。也就是说a只占一个字节

    我遇到的问题:

        (1)int a =10;int* p=&a;这个指针p占内存多大?所有的指针占一个字节的内存,那么这里的int*p是不是浪费了三个字节?
              之前有个误区,一直以为指针占一个字节,经过测试在32位机器上,指针是占四个字节的,int*p=&a;a本身占四个字节,要存放它的地址的指针也得是四个字节。
        
        (2)(int*)p;这个int是让p的地址先转换成四个字节,还是p指向的变量占四个字节?
           p指向的变量是四个字节的,所以指向它的指针也是四个字节的。

    总结:

        如果不是再次整理得话,我还真不知道自己原来还有这么多盲区,看来以后需要多加练习了,这次整理用了三个多小时,还行吧,收获挺大的,可能在这次在整理中还有很多疏漏,以后时常回头再来发现它,加油吧!

     

  • 相关阅读:
    Apache ab并发负载压力测试(python+django+mysql+apache)
    Python+Django 后台view异步接不到参数问题
    java报错 pom.xml第一行报"org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project...
    国内Maven仓库地址
    【转载】Java枚举的使用
    搭建SSM环境(淘淘商城)
    【转载】使用appium遇到的坑
    【maven】Description Resource Path Location Type An error occurred while filtering resources TESTVIDEO line
    Maven配置
    【转载】linux下的zookeeper启动
  • 原文地址:https://www.cnblogs.com/1024E/p/13209644.html
Copyright © 2020-2023  润新知