~/****************************** ~ ~ PG班講義 ポインタ基礎 ~ PG班講義 ポインタ基礎 ~ ~******************************/ ~ ~/* ポインタ:ある変数が使っているメモリのアドレス(番地)を示すもの */ ~ ~#include <stdio.h> ~#include <stdlib.h> ~ ~int main(void){ ~ int a; ~ int *pa; ~ int **ppa; ~ ~ /* アドレスを表示するにはアドレス演算子 & を使う ~ aの値とアドレスの表示は次の通り */ ~ a=1; ~ printf(" a = %d\n &a = %p\n",a,&a); ~ ~ /* aのポインタ pa を作ってそこにaのアドレスを突っ込んでみる */ ~ pa=&a; ~ printf(" *pa = %d\n pa = %p\n\n",*pa,pa); ~ ~ /* aをいじると当然*paも変わる */ ~ a=2; ~ printf(" a = %d\n &a = %p\n",a,&a); ~ printf(" *pa = %d\n pa = %p\n\n",*pa,pa); ~ ~ /* 逆もまた然り */ ~ *pa=10; ~ printf(" a = %d\n &a = %p\n",a,&a); ~ printf(" *pa = %d\n pa = %p\n\n",*pa,pa); ~ ~ /* ポインタのポインタなんてこともできる */ ~ ppa=&pa; ~ printf("**ppa= %d\n ppa = %p\n",**ppa,ppa); ~ /* ちなみに *ppa はこんな値になる */ ~ printf("*ppa = %p\n\n",*ppa); ~ ~ /* stdilib.h のmalloc関数を使うと変数のアドレスを示さなくても ~ ポインタを使えるようになる */ ~ /* malloc(型):型サイズの void* を返す */ ~ pa=(int*)malloc(sizeof(int)); ~ *pa=100; ~ printf(" *pa = %d\n pa = %p\n\n",*pa,pa); ~ ~ return 0; ~} ~/****************************** ~<実行例> ~ a = 1 ~ &a = 0029FCE0 ~ *pa = 1 ~ pa = 0029FCE0 ~ ~ a = 2 ~ &a = 0029FCE0 ~ *pa = 2 ~ pa = 0029FCE0 ~ ~ a = 10 ~ &a = 0029FCE0 ~ *pa = 10 ~ pa = 0029FCE0 ~ ~**ppa= 10 [#qdd91304] ~ ppa = 0029FCD4 ~*ppa = 0029FCE0 [#f675a574] ~ ~ *pa = 100 ~ pa = 006E1390 ~ ~******************************/