满天*

作者: odaycaogen | 来源:发表于2019-01-23 18:28 被阅读0次

    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

    相关文章

      网友评论

          本文标题:满天*

          本文链接:https://www.haomeiwen.com/subject/efysjqtx.html