c point struct 最后一波

/*
 author : poilynx
*/
#include<stdio.h>
#include<stdlib.h>
#pragma pack(push,1)
struct s1
{
    int a;
    struct
    {
        int ba;
        struct
        {
            char bba;
            double bbb;
            int bbc;//
        }*bb;

    }*b;
};
#pragma pack(pop)
static void * _alloc(void)
{
    void *p=malloc(sizeof(int)+sizeof(void *)); /* s1 */
    *(void**)(p+sizeof(int)) =malloc(sizeof(int)+sizeof(void *)); /* s1->b */
    *(void**)((*(void**)(p+sizeof(int)))+sizeof(int))=malloc(sizeof(char)+sizeof(double)+sizeof(int)); /* s1->b->bb */

    printf("Entry = %p\n", p);
    return p;
}
static void _fill(void *p)
{
    *(int*)(p)=1;/* s1->a */
    *(int*)(*(void**)((int*)p+1))=2;/* s1->b->ba */
    //printf("(bb) %p\n", *(void**)((*(int**)((int*)p + 1)) + 1) );
    *(double*)(
        *(char**)(
            *(int**)(
                (int*)p + 1
            ) + 1
        ) + 1
    ) = 3.0;/* s1->b->bb->bbb */
    *(int*)(/* 解引用 */
        *(void**)(                          /* 解引用 */
            *(void**)(                  /* 解引用 */
                p + sizeof(int)         /* 偏移 */
            ) + sizeof(int)                 /* 偏移 */
        ) + sizeof(char) + sizeof(double)   /* 偏移 */
    ) = 4; /* s1->b->bb->bbc */
    //*(( char* )(*(( void** )p+1))+1)='3';

}
static void _read(struct s1 *p)
{
    printf("p->a : %d\n", p->a);
    printf("p->b->ba : %d\n",p->b->ba);
    printf("p->b->bb->bbb : %lf\n", p->b->bb->bbb);
    printf("p->b->bb->bbc : %d\n", p->b->bb->bbc);
}
int main()
{
    struct s1 * p;
    p = _alloc();
    _fill(p);
    _read(p);

    return 0;
}


/*人类说他快气死了,我觉得他活得好好的,这是人类代码,喏 ,我就暂时不卖他了,有时候他让我学习,简直让我想把他卖掉,这样就没有人烦我啦,可是万一不久他就自己把自己卖掉怎么办,出于这个考虑,我就不卖他了,去看代码去。溜*/

    指针的值 &&指针的地址 这个代码我应该是会写了吧   再不会写  那就还是人类的原因,哈哈哈哈哈哈哈 好像人类的解释要稍微比久久的好理解下,有空对比看看
        


猜你喜欢

转载自blog.csdn.net/zuoside__lord/article/details/80212172