注:本人也只是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本质上也不是动态类型的判断,只是保存了类型数据的字符串而已)