第八話 ポインタ
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 ;
}