#include <stdio.h>

#define PR(format,value) printf(#value"= %"#format"\t",(value))
#define NL putchar('\n')

#define PRINT1(f,x1) PR(f,x1), NL
#define PRINT2(f,x1,x2) PR(f,x1), PRINT1(f,x2)
#define PRINT3(f,x1,x2,x3) PR(f,x1), PRINT2(f,x2,x3)
#define PRINT4(f,x1,x2,x3,x4) PR(f,x1), PRINT3(f,x2,x3,x4)
#include "defs.h"

int main(void)
{
    static struct s1 {
        char c[4], *s;
    } s1 = {"abc","def"};

    static struct s2 {
        char *cp;
        struct s1 ss1;
    } s2 = {"ghi", {"jkl","mno"}};

    PRINT2(c,s1.c[0],*s1.s);
    PRINT2(s,s1.c,s1.s);

    PRINT2(s,s2.cp,s2.ss1.s);
    PRINT2(s,++s2.cp,++s2.ss1.s);
}


//Simple Structure, nested structure;
#include "defs.h"

struct s1 {
    char *s;
    int i;
    struct s1 *s1p;
};

int main(void)
{
    static struct s1 a[] = {
        { "abcd" , 1, a+1},
        { "efgh", 2, a+2},
        { "ijkl", 3, a}
    };

    struct s1 *p = a;
    int i;

    PRINT3(s,a[0].s,p->s,a[2].s1p->s);

    for(i=0; i<2; i++) {
        PR(d,--a[i].i);
        PR(c,++a[i].s[3]);
        NL;
    }

    PRINT3(s,++(p->s),a[(++p)->i].s,a[--(p->s1p->i)].s);
}
#include "defs.h"

struct s1 {
    char *s;
    struct s1 *s1p;
};

int main(void)
{
    static struct s1 a[] = {
        {"abcd", a+1},
        {"efgh",a+2},
        {"ijkl",a}
    };

    struct s1 *p[3];
    int i;

    for (i=0; i<3; i++ ) 
        p[i] = a[i].s1p;
       PRINT3(s,p[0]->s,(*p)->s,(**p).s);

       swap(*p,a);
       PRINT3(s,p[0]->s,(*p)->s,(*p)->s1p->s);

       swap(p[0],p[0]->s1p);
       PRINT3(s,p[0]->s,(*++p[0]).s,++(*++(*p)->s1p).s);
       
}

swap(p1,p2)
struct s1 *p1,*p2;
{ char *temp;
    temp = p1->s;
    p1->s = p2->s;
    p2->s =temp;
}
    
//Array of Pointer to Structures
posted on 2012-08-10 13:43  abacuspix  阅读(411)  评论(0编辑  收藏  举报