KENスクールブログ | パソコン教室・パソコン講座なら個別指導のKENスクール

BLOGKENスクールブログ

  1. KENスクール TOP >
  2. KENスクールブログ > プログラム > [C言語基礎]スタックと関数

プログラム

[C言語基礎]スタックと関数

C言語における、スタックと関数の関係をご紹介します。

スタック

スタックとは、処理中のデータを一時的に退避させるための記憶領域やデータ構造のことです。データの格納と取り出しは、後入先出法(Last In First Out)になります。片側しか開いてない筒のようなものに、データを格納するイメージです。

stack_functions1

データを格納することを「プッシュ」、取り出すことを「ポップ」と呼びます。

このようにデータを格納すると、データAを取り出すためにはデータBを先に取り出す必要があり、後入先出となるわけです。

スタックへのデータの一時退避はプログラム実行時に利用され、代表的なものの1つに関数呼び出しがあります。

例えば次のようなプログラムの場合

#include<stdio.h>
int myfunc(void);
int main(void){
    myfunc();           //myfunc関数の呼び出し
    printf(“main”);
    return 0;
}

int myfunc(void) {
    printf(“myfunc”);
    return 0;           //main関数へ処理が戻る
}

main関数の処理にmyfunc関数の呼び出しがありますので処理が移ります。
このときmyfunc関数の処理が終了したら呼び出し元に戻るために、あらかじめ呼び出し元のアドレスを記録しておきます。
その記録場所がスタックということです。

#include<stdio.h>
int myfunc1(void);
int myfunc2(void);

int main(void){
    myfunc1();        //①アドレスAをスタックに記録して関数を呼び出しstack_functions2

    printf(“main”);
    return 0;
}

int myfunc1(void){
    myfunc2();        //②アドレスBをスタックに記録して関数を呼び出しstack_functions3

 

    printf(“myfunc1”);
    return 0;        //④スタックのアドレスAを参照して戻るstack_functions5
}

int myfunc2(void){
    printf(“myfunc2”);
    return 0;        //③スタックのアドレスBを参照して戻るstack_functions4
}

 

以上になります。
プログラムの文法だけでなくプログラムの処理の仕組みを知ることも、理解を深める上で重要なことなので、積極的に学習していきましょう。

この記事に関連する講座

C言語をマスターするならこのコース!!

詳しくはこちら