C言語のポインタの覚書
入力した2つの整数を交換する関数。ポインタを使用。
※参考書:新・明解C言語 入門編 サンプルコードより引用
Swap.Test.c
#include <stdio.h>
int swap(int* px,int* py) //int 型のpx,pyのポインタの箱を用意する
{
int tmp = *px; //tmpにpxのポインタを格納
*px = *py; //pxのポインタにpyのポインタの値を格納
*py = tmp; //pyのポインタにtmpの値を格納(pxとpyを交換した)
}
int main(void)
{
int na, nb; //int型の箱na,nb
puts("2つの整数を入力してください。");
printf("整数A:"); scanf("%d", &na); //入力した値をアドレスnaに送る
printf("整数B:"); scanf("%d", &nb); //入力した値をアドレスnbに送る
swap(&na,&nb); //整数Aのアドレスと整数Bのアドレスを交換
puts("2つの整数を交換しました。");
printf("整数A:%d\n", na); //na,nbのアドレスにある値を出力
printf("整数B: %d\n", nb);
}
※ポインタとはアドレスを格納するための変数である。
● &na、&nbは値(na,nb)のアドレス
● *pxはポインタの変数(ここではnaのアドレスが入っている)、
*pyはポインタ変数(ここではnbのアドレスが入っている)
int* pxはポインタ(*px)を入れるための引数
int* pyはポインタ(*py)を入れるための引数
1.&na,&nb(アドレス)に入力した値を送る
2.swap(int* px, int* py)で&na、&nb(アドレス)を受け取り*px,*py(ポインタ)に送る
3.*px,*py(ポインタ)は&na,&nb(アドレス)の引数なのでそのまま代入される
4.na,nbを出力すると&na、&nb(naのアドレス、nbのアドレス)に格納されている値が交換されている
つまり、*pxはnaのアドレスが格納されていて、*pyはnbのアドレスが格納されているというイメージになります