第八話 ポインタ

 


ptr01.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

int main( void )

{

        short *pi,pj;

        short s=10;

        pi=&s;

        pj=&s;

        printf("s=%d\n",*pi);

        printf("s=%d\n",*pj);

        return 0 ;

}


ptr02.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

int main( void )

{

        short *pi,*pj;

        short s=10;

        pi=&s;

        pj=&s;

        printf("s=%d\n",*pi);

        printf("s=%d\n",*pj);

        return 0 ;

}


ptr03.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

typedef short* pShort;

int main( void )

{

        pShort pi,pj;

        short s=10;

        pi=&s;

        pj=&s;

        printf("s=%d\n",*pi);

        printf("s=%d\n",*pj);

        return 0 ;

}


ptr03a.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

#define pShort short*

 

int main( void )

{

        pShort pi,pj;

        short s=10;

 

        pi=&s;

        pj=&s;

        printf("s=%d\n",*pi);

        printf("s=%d\n",*pj);

 

        return 0 ;

}


ptr04.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        const char* pa;

        char  a[100]="abc";

 

        pa=a;

        printf("%s\n",pa);

 

        /*      *pa='A';        error   */

 

        return 0 ;

}


ptr04a.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        const char* pa;

        char* pb;

        char  a[100]="abc";

 

        pa=pb=a;

        printf("%s\n",pa);

 

        *pb='A';

        printf("%s\n",pb);

 

        return 0 ;

}


ptr05.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char  a[100]="abc";

        char* const pa=a;

 

        printf("%s\n",pa);

 

        *pa='A';

        printf("%s\n",pa);

 

        /*      pa++;   error */

 

        return 0 ;

}


ptr05a.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char  a[100]="abc";

        const char *const pa=a;

 

        printf("%s\n",pa);

 

        /*      *pa='A';        error */

 

        /*      pa++;   error */

 

        return 0 ;

}


ptr06.c

/*

 * arguemnts

 *

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int subInc( int i )

{

        return ++i;

}

 

int subDec( int i )

{

        return --i;

}

 

int main( void )

{

        int i;

        int (*pSub)(int i);

 

        pSub=subInc;

        i=pSub(10);

        printf( "i=%d\n", i);

 

        pSub=subDec;

        i=pSub(10);

        printf( "i=%d\n", i);

 

        return 0 ;

}


ptr07.c

/*

 * arguemnts

 *

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdlib.h>

void saikoro1( void );

void saikoro2( void );

void saikoro3( void );

void saikoro4( void );

void saikoro5( void );

void saikoro6( void );

void saikoroNG( void );

int main( void )

{

        int i;

        srand( 1 );

        while( 1 )

        {

                i = rand();

                i = i%6 + 1;

                switch( i )

                {

                case 1:

                        saikoro1();

                        break;

                case 2:

                        saikoro2();

                        break;

                case 3:

                        saikoro3();

                        break;

                case 4:

                        saikoro4();

                        break;

                case 5:

                        saikoro5();

                        break;

                case 6:

                        saikoro6();

                        break;

                default:

                        break;  /* おまけ */

                }

                sleep( 1 );

        }

        return 0 ;

}


ptr07Sub.c

/*

 * arguemnts

 *

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

void saikoro1( void )

{

        printf("1の目が出た\n");

}

void saikoro2( void )

{

        printf("2の目が出た\n");

}

void saikoro3( void )

{

        printf("3の目が出た\n");

}

void saikoro4( void )

{

        printf("4の目が出た\n");

}

void saikoro5( void )

{

        printf("5の目が出た\n");

}

void saikoro6( void )

{

        printf("6の目が出た\n");

}

void saikoroNG( void )

{

        printf("変な目が出た\n");

}


ptr07a.c

/*

 * arguemnts

 *

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdlib.h>

 

void saikoro1( void );

void saikoro2( void );

void saikoro3( void );

void saikoro4( void );

void saikoro5( void );

void saikoro6( void );

void saikoroNG( void );

 

void (*saikoroN[])( void ) =

{saikoroNG,saikoro1,saikoro2,saikoro3,saikoro4,saikoro5,saikoro6};

 

int main( void )

{

        int i;

 

        srand( 1 );

        while( 1 )

        {

                i = rand();

                i = i%6 + 1;

                saikoroN[i]();

                sleep( 1 );

        }

 

        return 0 ;

}


ptrinc01.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char *pc;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pc=c;

        printf("%c\n",*pc);

        pc++;

        printf("%c\n",*pc);

        pc+=3;

        printf("%c\n",*pc);

 

        return 0 ;

}


ptrinc02.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int *pi;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pi=(int*)c;

        printf("%c\n",*(char*)pi);

        pi++;

        printf("%c\n",*(char*)pi);

        pi+=3;

        printf("%c\n",*(char*)pi);

 

        return 0 ;

}


ptrsub01.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char *pc0;

        char *pc1;

        char *pc2;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pc0=c;

        pc1=pc0+sizeof(c);

        pc2=pc1-pc0;

        printf("pc1-pc0=%d, size of c=%d\n", pc2, sizeof(c));

 

        return 0 ;

}


ptrsub02.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int *pi0;

        int *pi1;

        int e;

        int i[]={0,1,2,3,4,5,6,7,8,9};

 

        pi0=i;

        pi1=pi0+sizeof(i)/sizeof(i[0]);

        e=pi1-pi0;

        printf("pi1-pi0=%d, entry of i=%d, size of i=%d\n",

                e, sizeof(i)/sizeof(i[0]), sizeof(i));

 

        return 0 ;

}


ptrComp01.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int i;

        char *pc0;

        char *pc1;

        char a[10];

 

        pc1=&a[5];

 

        for(i = 0; i < 10; i++)

        {

                pc0=a+i;

                if(pc0 < pc1)

                        printf("pc0 less than pc1\n");

                else

                if(pc0 == pc1)

                        printf("pc0 equal to pc1\n");

                else

                        printf("pc0 greater than pc1\n");

        }

 

        return 0 ;

}


ptrArray01.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int i;

        int *pa;

        int a[]={0,1,2,3,4};

 

        printf("size of a=%d, size of pa=%d\n", sizeof(a), sizeof(pa));

 

        pa=a;

        for(i = 0; i < sizeof(a)/sizeof(a[0]); i++)

                printf("&a[%d]=0x%08x, a+%d=0x%08x, &pa[%d]=0x%08x, pa+%d=0x%08x\n",

                        i, &a[i], i, a+i, i, &pa[i], i, pa+i);

 

        return 0 ;

}


ptrArray02.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int i;

        char *pc;

        char a='a';

        char b='b';

        char c='c';

        char d='d';

        char e='e';

        char f='f';

        char z='\0';

 

        pc=&a;

        printf("*pc=");

        for(i = 0; pc[i]!='\0'; i++)

                printf("%c",pc[i]);

        printf("\n");

 

        return 0 ;

}


ptrArray03.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *                               Hiro KITAYAMA

 */

#include <stdio.h>

 

int main( void )

{

    int a[]={0,10,20,30,40};

    int *pa;

 

    pa=a;

    printf("pa=0x%08x, *pa=%d\n", pa, *pa);

    *pa++;

    printf("pa=0x%08x, *pa=%d\n", pa, *pa);

    *++pa;

    printf("pa=0x%08x, *pa=%d\n", pa, *pa);

    ++*pa;

    printf("pa=0x%08x, *pa=%d\n", pa, *pa);

 

    return 0 ;

}


ptrArray04.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *                               Hiro KITAYAMA

 */

#include <stdio.h>

 

int main( void )

{

    int i,j;

    int *pa;

    int a[3][5] =

            {

                { 0, 1, 2, 3, 4},

                {10,11,12,13,14},

                {20,21,22,23,24}

            };

 

    pa=a;

    for(i = 0; i<3; i++)

    {

        for(j = 0; j<5; j++)

            printf("%2d ",pa[i][j]);

        printf("\n");

    }

 

    return 0 ;

}


ptrArray04a.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

    int i,j;

    int (*pa)[5];

    int a[3][5] =

            {

                { 0, 1, 2, 3, 4},

                {10,11,12,13,14},

                {20,21,22,23,24}

            };

 

    pa=a;

    for(i = 0; i<3; i++)

    {

        for(j = 0; j<5; j++)

            printf("%2d ",pa[i][j]);

        printf("\n");

    }

 

    return 0 ;

}


ptrArray04b.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

    int i,j;

    int *pa;

    int a[3][5] =

            {

                { 0, 1, 2, 3, 4},

                {10,11,12,13,14},

                {20,21,22,23,24}

            };

 

    for(i = 0; i<3; i++)

    {

        pa=a[i];

        for(j = 0; j<5; j++)

            printf("%2d ",pa[j]);

        printf("\n");

    }

 

    return 0 ;

}


ptrArray04c.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *                               Hiro KITAYAMA

 */

#include <stdio.h>

 

int main( void )

{

    int i,j;

    int *pa[3];

    int a[3][5] =

            {

                { 0, 1, 2, 3, 4},

                {10,11,12,13,14},

                {20,21,22,23,24}

            };

 

    pa[0]=a[0];

    pa[1]=a[1];

    pa[2]=a[2];

 

    for(i = 0; i<3; i++)

    {

        for(j = 0; j<5; j++)

            printf("%2d ",pa[i][j]);

        printf("\n");

    }

 

    return 0 ;

}


ptrPtr01.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char c;

        char *pc;               /* ポインタ */

        char **ppc;             /* ポインタのポインタ */

 

        c='A';

        pc=&c;

/*      ppc=&c; */      /* 警告あり */

        ppc=&pc;

 

        printf("c=%c, pc=0x%08x, *pc=%c, *ppc=0x%08x, **ppc=%c\n",

                c, pc, *pc, *ppc, **ppc);

 

        return 0 ;

}


ptrPtr02.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

int main( void )

{

        char c;

        char *p0c;

        char **p1c;

        char ***p2c;

        char ****p3c;

        char *****p4c;

        char ******p5c;

        char *******p6c;

        char ********p7c;

        char *********p8c;

        char **********p9c;

        char ***********p10c;

        char ************p11c;

        char *************p12c;

        c='A';

        p0c=&c;

        p1c=&p0c;

        p2c=&p1c;

        p3c=&p2c;

        p4c=&p3c;

        p5c=&p4c;

        p6c=&p5c;

        p7c=&p6c;

        p8c=&p7c;

        p9c=&p8c;

        p10c=&p9c;

        p11c=&p10c;

        p12c=&p11c;

        printf("*************p12c=%c\n", *************p12c);

        return 0 ;

}


ptrPtr03.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

void sub(int i, char **ppc)

{

        printf("pc[%d]=%s\n", i, ppc[i]);

}

int main( void )

{

        int i;

        char *brother[]={"一郎","花子","次郎","桃子"};

        for(i = 0; i<4; i++)

                sub(i, brother);

        return 0 ;

}


 

書籍に掲載されていないソース

 

-------------------------------

ptrsub03.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char *pc;

        int *pi;

        int e;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pc=c;

        pi=(int *)(pc+sizeof(c));

        e=pi-pc;

        printf("pi-pc=%d\n",e);

 

        pi=(int *)c;

        pc=(char *)(pi+sizeof(c));

        e=pc-pi;

        printf("pc-pi=%d\n",e);

 

        return 0 ;

}

 

-------------------------------

ptrinc01a.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        char *pc;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pc=c;

        printf("%c (pc=0x%08x)\n",*pc,pc);

        pc++;

        printf("%c (pc=0x%08x)\n",*pc,pc);

        pc+=3;

        printf("%c (pc=0x%08x)\n",*pc,pc);

 

        return 0 ;

}

 

-------------------------------

ptrinc02.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int *pi;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pi=(int*)c;

        printf("%c\n",*(char*)pi);

        pi++;

        printf("%c\n",*(char*)pi);

        pi+=3;

        printf("%c\n",*(char*)pi);

 

        return 0 ;

}

 

-------------------------------

ptrinc02a.c

/*

 * (c)Copyright Spacesoft corp., 2006 All rights reserved.

 *

 */

#include <stdio.h>

 

int main( void )

{

        int *pi;

        char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

        pi=(int*)c;

        printf("%c (pi=0x%08x)\n",*(char*)pi,pi);

        pi++;

        printf("%c (pi=0x%08x)\n",*(char*)pi,pi);

        pi+=3;

        printf("%c (pi=0x%08x)\n",*(char*)pi,pi);

 

        return 0 ;

}

もどる