Nodachisoft Nodachisoft logo, Katana Sword Icon
  
@あまじ✎ 2021年2月1日に更新

第2章40 swap関数を作ってポインタ変数の中身を交換する

第2章40 swap関数を作ってポインタ変数の中身を交換する
イチからゲーム作りで覚えるC言語
第2章39 ヌルポインタ(NullPointer) と Void について : PREV
NEXT : 第2章41 副作用がある関数、純粋関数、イミュータブル :

この記事でやること

ここでは C言語のポインタを使って、渡した2つの変数の中身を交換(=スワップ; swap)する方法を確認します。

swap は、例えばデータの並べ替え(ソート)等、様々なアルゴリズムの中で使用されます。 また swap 関数を作りながら、ポインタの有用な使い方である、参照渡し(ポインタ渡し)について理解を深めていきます。

簡単な swap 関数の例

プレイヤーの体力と敵キャラの体力が入れ替わってしまうシーンをイメージしてプログラミングしてみます。

体力を swap して、中身を入れ替えています。

 
swap.c
#include <stdio.h>
void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int playerHp = 100;
    int enemyHp = 50;
    printf("あなたの体力:%d\n", playerHp);
    printf("闇魔法使いの体力:%d\n", enemyHp);
    
    printf("闇魔法使いは体力交換の魔法を唱えた!\n");
    swap( &playerHp, &enemyHp);

    printf("あなたの体力:%d\n", playerHp);
    printf("不思議な魔法使いの体力:%d\n", enemyHp);
}

自作の swap 関数を作成しています。

swap 関数は二つの int 型ポインタへの引数を持っており、 変数 x と y のメモリアドレスの中身を交換していますね!

二つの変数の中身を交換するにあたって、下のように一時変数 temp を使っています。

2つの変数をスワップする図

今回は int 型の交換を意図していますが、 例えば float 型や short 型を交換したければ、引数の型と一時変数を float型ポインタ、 short 型ポインタに 変更してあげればOKです!

あとがき

swap 関数は様々なアルゴリズムで使用される非常に便利な機能です!

今回はここまでです!おつかれさまでした。

非常に参考になったサイトさまや、参考文献など

(英語)MIT - 6.087 Practical Programming in C, Problem Set 4 Solutions - swap

ページの更新履歴

更新日 更新内容
更新なし
イチからゲーム作りで覚えるC言語
第2章39 ヌルポインタ(NullPointer) と Void について : PREV
NEXT : 第2章41 副作用がある関数、純粋関数、イミュータブル :
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

第1章01 Visual Studio Community 2019 のインストール手順

第1章01 Visual Studio Community 2019 のインストール手順

#C11仕様#C言語#ゲームプログラミング✎ 2021-08-08
C言語でプログラミングをするために、無料で使える Visual Studio Community を使った開発環境を揃えていく手順や注意点をお話しています。
目次
第2章40 swap関数を作ってポインタ変数の中身を交換する
第2章40 swap関数を作ってポインタ変数の中身を交換する
この記事でやること
この記事でやること
簡単な swap 関数の例
簡単な swap 関数の例
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2021