满天*

2019-01-23  本文已影响0人  odaycaogen

int i = 100;

int* p = &i;

int**p1 = &p;

int***p2 = &p1;

int****p3 = &p2;

int*****p4 = &p3;

int******p5 = &p4;

printf("%d %d \n",*(*(*p2)),p2[0][0][0]); 

printf("%d %d \n",*(*(*(*(p3)))),p3[0][0][0][0]) ;

printf("%d %d\n",*(*(*(*(*(p4))))),p4[0][0][0][0][0]);

printf("%d %d\n",*(*(*(*(*(*(p5)))))),p5[0][0][0][0][0][0]);

运行结果:

总结指针特性:

1、任何变量前面都可以加一个或多个* 加上*以后就是一个新的类型

2、&表达式做取地址用途,那么它会生成一个在原数据类型的基础上多一个*的类型,如 &p2 操作 p2原类型是 int***,那么给&p2表达式赋值的时候必须用一个新的类型 int****类型来接收 

3、不管多少*的变量类型数据宽度都是4个字节(32位的机器上)

4、++/-- 根据自身类型 加或减的值去掉一个星号后的宽度

5、int* p  p的类型是 int*  对变量p加*操作的类型就是去掉一个*的类型 如p2 类型是int*** 那么*p2的类型就是int**仍然是4字节宽度

int i = 100;

010D4CB8  mov        dword ptr [i],64h 

int* p = &i;

010D4CBF  lea        eax,[i] 

010D4CC2  mov        dword ptr [p],eax 

int**p1 = &p;

010D4CC5  lea        eax,[p] 

010D4CC8  mov        dword ptr [p1],eax 

int***p2 = &p1;

010D4CCB  lea        eax,[p1] 

010D4CCE  mov        dword ptr [p2],eax 

int****p3 = &p2;

010D4CD1  lea        eax,[p2] 

010D4CD4  mov        dword ptr [p3],eax 

int*****p4 = &p3;

010D4CD7  lea        eax,[p3] 

010D4CDA  mov        dword ptr [p4],eax 

int******p5 = &p4;

010D4CDD  lea        eax,[p4] 

010D4CE0  mov        dword ptr [p5],eat 

文章出自 123``blog

上一篇 下一篇

猜你喜欢

热点阅读