ポインタ配列



■ポインタの規則
・存在しないアドレスを参照してはいけない
・ポインタは配列のように[]を使用できる

<ポインタの配列添字のサンプル-ポインタによる配列添字を利用->

#include <stdio.h>
#include <malloc.h>

void main(void)
{
 int i, *foo;

 //メモリを確保してそのメモリへのポインタをポインタ変数に渡す
 foo=(int *)malloc(10*sizeof(int));

 //メモリが確保されていれば...
 if (foo!=NULL)
 {
   //メモリに値を代入
   for (i=1;i<11;i++)
   {
    foo[i-1] =i;
   }

   //メモリの内容を表示する。
   for (i=0;i<10;i++)
   {
    printf("%d",foo[i]);
   }

   free(foo);
 } 
 else
  printf("メモリが確保できませんでした。");

 getchar();
}

※メモリが正常に確保できれば"12345678910"と入力される

■ポインタ配列の書式
データ型 *ポインタ配列名[要素数]

<ポインタ配列のサンプル-ポインタに配列->

#include <stdio.h>

void main(void)
{
 int a[5]={10,60,10,90,40};
 int b[5]={50,30,30,80,20};
 int i,ave,*p[2];

 //a,bの配列の先頭アドレスを格納
 p[0]=&a[0];
 p[1]=&b[0];
 //これでも可
 // p[0]=a;
 // p[1]=b; 

 for(i=0;i<5;i++)
 {
  //pに格納された先頭アドレスを利用して配列aと配列bの平均を求める 
  ave=(*(p[0]+i)+*(p[1]+i)) /2;
  printf("%d=%d\n",i,ave);
 }
 getchar();

}

※0=30 1=45 2=20 3=85 4=30となる



Cの基礎のページへ



ホーム PV ランキング