C/C++语言类型个人理解

注:本人也只是c/c++初学者,不会汇编,以下内容只是平时写代码的总结(笔记)。若有错误,欢迎指出

指针类型与值类型

{
    //值类型
    int a; 
    char b;
    float c;
    struct{
        int a,b,c
    }d;
    int e[10];
    //指针类型
    int* a_;
    char* b_;
    float c_;
    struct{
        int a,b,c
    }d_;
    int* e = int[10]();
    int& f = a;//引用类型本质是指针
    char& g = b;
}
值类型:

值类型即其本身,储存在栈中

指针类型:

栈中储存地址,访问时先寻址,再将读取的数据存放到寄存器中

既然只有指针类型和值类型,那int,char,int*,char*这些算什么?

答:

int,char只是作为标识,本质上他们还是指针类型(值类型),再来看看指针类型是怎么访问数据的

{
    int i = 0;
    int* a = &i;//假设&i = 0x6666
    *a;
}

这时候*a干的事就是,先寻址0x6666,再获取类型大小(int在32位机及其以上是4字节),读取0x6666---0x6669地址的数据,并放到寄存器里

其中,黄色字体是运行时的操作,蓝色字体是编译时的操作(c/c++是静态语言,任何完整类型在编译期都可以确定大小)

类型的主要作用就体现在这,在程序运行时,将不会有类型的概念,也就是没办法做到动态判断类型(typeid本质上也不是动态类型的判断,只是保存了类型数据的字符串而已)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值