タイトル「ポインタを含む関数の呼び出し」とありますが、ポインタを含んでいることは全く関係ありません。
C
1#include <stdio.h>
2
3void pointa(void) {
4 int x;
5 printf("%p\n", &x);
6}
7
8void pointa2(void) {
9 int y;
10 printf("%p", &y);
11}
12
13int main(void) {
14 pointa();
15 pointa2();
16}
でも多分結果は変わらないんじゃないかと想像します。
関数を呼び出したら、呼び出し先から戻るまでは呼び出し元の関数の情報は使いません。気にするのは、呼び出されて今実行している関数だけでいい...なので、関数を呼び出すときの情報、またローカル変数は「スタック」領域に取られます。スタックってのはあるメモリ領域で、いわば書類を箱に放り込んでいくような(stack:積み上げ)処理方式をとるものです。
メイン関数を実行している時、
ここからpointa関数を呼び出すとpointa関数についての情報やローカル変数を「その上」にとって
| |
---|
pointa関数の情報(戻り先とかローカル変数とか) | |
main関数の情報(戻り先とかローカル変数とか) | |
pointa関数の処理が終わってmain関数に戻る時pointa関数の情報は取り除かれて
さらにpointa2関数を呼び出すと
| |
---|
pointa2関数の情報(戻り先とかローカル変数とか) | |
main関数の情報(戻り先とかローカル変数とか) | |
そうすると、pointa関数とpointa2関数の構造が一緒なら、多分そのローカル変数が取られる場所も一緒になりそう、に思いませんか。(多分...)
(実際には空き領域を効率よく使う為に上から下に「掘り下げ」ていくことも多いんだけど、そういう話はまだいいでしょう)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。