ポインタ: 変数のアドレス
x はアドレス (4,3) と値 10 をもつ。
y はアドレス (2,5) と値 3 をもつ。
1
1
2
3
4
5
6
7
2
3
4
5
y =3
x=10
主記憶装置(メモリ)の仮想的な図
ポインタ
 ある変数を指す変数をポインタと呼ぶ。
 ポインタは、対応する変数のアドレスを値としてもつ。
ポインター p が変数 i を指すためには:
p=&i;
変数 i
アドレス &i
値
i
ポインタ p
アドレス &p
値 p
注: 変数のアドレスは変数の前に & を付けると得られる。
ポインタをどうとらえるか
i を「普通」の変数、p を、i を指す「ポインタ」とする。
変数 i
アドレス &i
ポインタ p
アドレス &p
値
①
値 p
i
②
*p
 ①の縁結び (p=&i) をすると、②の関係ができる。
 i と *p は一つのものに付けた二つの名前
ポインタは、&p, p, *p の3つの値をもつ
ポインタの使い方
ポインタの宣言法、i と *pは一つのものであることを確認
#include <stdio.h>
main( )
* はポインタ
{
の証
int i;
int *p;
p は整数型の変数を指すポインタ
p=&i;
p は変数 i のポインタである。
*p=123;
ポインタに値を入れる。
printf(“i=%d, *p=%d, p=%x\n”, i,*p,p);
i=456;
変数にに値を入れる。
printf(“i=%d, *p=%d, p=%x\n”, i,*p,p);
}
ポインタの用法:関数の引数としてcall by reference実現
#include<stdio.h>
void kansu(int *x);
main()
変数に&を
{
付けて関数
int m;
に渡す
scanf(“%d”,&m);
printf(“yomikomiti= %d\n”,m);
kansu(&m);
printf(“keisan_kekka=%d\n”, m);
}
void kansu(int *x)
{
*x=*x+10;
ポインタで
受け取る
}
課 題
2つの整数の値を交換する関数 swap を作れ。
main で、キーボードから2つの整数を読む。
関数 swap を呼ぶと、値が交換されていることを確認せよ。
ダウンロード

ポインタ