• [C puzzle book] Pointers and Arrays


    #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 a[]={0,1,2,3,4};
    
    int main(void)
    {
        int i,*p;
        for(i=0;i<=4;i++)
            PR(d,a[i]);
        NL;
    
        for(p=&a[0];p<=&a[4];p++)
            PR(d,*p);
        NL; NL;
    
        for(p=&a[0],i=1;i<=5;i++)
            PR(d,p[i]);
        NL;
    
        for(p=a,i=0;p+i<=a+4;p++,i++)
            PR(d,*(p+i));
        NL;NL;
    
        for(p=a+4;p>=a;p--) 
            PR(d,*p);
        NL;
        for(p=a+4,i=0;i<=4;i++)
            PR(d,p[-i]);
        NL;
    
        for(p=a+4; p>=a;p--)
            PR(d,a[p-a]);
        NL;
    
    
    }
    //Simple array and pointer
    #include "defs.h"
    
    int a[] = {0,1,2,3,4};
    int *p[]={a,a+1,a+2,a+3,a+4};
    
    int **pp=p;
    
    int main(void)
    {
        PRINT2(d,a,*a);
        PRINT3(d,p,*p,**p);
        PRINT3(d,pp,*pp,**pp);
        NL;
    
        pp++;  PRINT3(d,pp-p,*pp-a,**pp);
        *pp++; PRINT3(d,pp-p,*pp-a,**pp);
        *++pp; PRINT3(d,pp-p,*pp-a,**pp);
        ++*pp; PRINT3(d,pp-p,*pp-a,**pp);
        NL;
    
        pp=p;
        **pp++; PRINT3(d,pp-p,*pp-a,**pp);
        *++*pp; PRINT3(d,pp-p,*pp-a,**pp);
        ++**pp; PRINT3(d,pp-p,*pp-a,**pp);
    }
    //Array of pointers
    #include "defs.h"
    
    int a[3][3] ={
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    
    int *pa[3] ={ a[0],a[1],a[2]};
    
    int *p=a[0];
    
    int main(void)
    {
        int i;
        for(i=0;i<3;i++)
            PRINT3(d,a[i][2-i],*a[i],*(*(a+i)+i));
        NL;
    
        for(i=0;i<3;i++)
            PRINT2(d,*pa[i],p[i]);
    
        
    }
    #include "defs.h"
    
    char *c[] = {
        "ENTER", "NEW","POINT","FIRST"};
    char **cp[]={c+3,c+2,c+1,c};
    char ***cpp=cp;
    
    int main(void)
    {
        printf("%s",**++cpp);
        printf("%s",*--*++cpp+3);
        printf("%s",*cpp[-2]+3);
        printf("%s\n",cpp[-1][-1]+1);
        return 0;
    }
  • 相关阅读:
    网络负载均衡LVS
    JS 模仿红绿灯(控制台)
    【转】wrk 压力测试的 lua脚本
    linux开机 自动挂载和启动jar包
    【转】jprofiler linux配置需要监听的程序的端口
    时间复杂度总结
    Windows Subsystem for Linux (WSL) 安装
    敬畏用户
    Golang语言HTTP客户端实践
    Groovy入门常用语法
  • 原文地址:https://www.cnblogs.com/abacuspix/p/2631718.html
Copyright © 2020-2023  润新知