LoginSignup
0
1

More than 3 years have passed since last update.

C言語初心者がポインタについて勉強してみた

Last updated at Posted at 2019-06-08

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のアドレスが格納されているというイメージになります

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1