1.关于地址符&:&是地址符,类型是其后面的类型加一个“*”,任何变量都可以使用&来获取地址,但不能用在常量上。
char a = 10; short b = 20; int c = 30; //&a &b &c的类型 //&a 是char* 类型 &b是short*类型 &c是int*类型
2、关于变量类型的反汇编
char a = 10; short b = 20; int c = 30; char* pa = &a; short* pb = &b; int* pc = &c; //&pa 是什么类型? &pa是char** 类型的 //&pb 是什么类型? &pb是short** 类型的 //&pc 是什么类型? &pc是int** 类型的
int* px; int** px2; int*** px3; int**** px4; //*(px) 是什么类型? int类型的 //*(px2) 是什么类型? int*类型的 //*(px3) 是什么类型? int** 类型的 //*(px4) 是什么类型? int*** 类型的
char a = 10; short b = 20; int c = 30; char* pa = (char*)&a; short* pb = (short*)&b; int* pc = (int*)&c; 简写为: char* pa = &a; short* pb = &b; int* pc = &c;
观察分析如下代码的反汇编:
char a = 10; short b = 20; int c = 30; char* pa = &a; short* pb = &b; int* pc = &c; char** ppa = (char**)&pa; short** ppb = (short**)&pb; int** ppc = (int**)&pc; 简写为: char** ppa = &pa; short** ppb = &pb; int** ppc = &pc;
反汇编:
总结: 带“*”号的宽度都是四个字节,存放的是地址去掉一个“*”的变量的地址
3、观察如下代码的反汇编
int x,y; int* px; int** px2; int*** px3; x = 10; px = &x; px2 = &px; px3 = &px2; y = *(*(*(px3)));
反汇编:
总结:
1、带“*”类型的变量,可以通过在其变量前加*来获取其指向内存中的存储值
2、带“*”类型的变量前面加上*,类型是原来的类型减去一个*