1 #include <stdio.h>
2
3 int main(void)
4 {
5 int hoge;
6
7 hoge=0x1234abcd;
8 printf("Hello world!\n");
9
10 printf("adress main:%p\n", main);
11 printf("adress hoge:%p\n", &hoge);
12
13 return 0;
14 }
Hello world! adress main:0x80483b4 adress hoge:0xbfacb7d0
なぜ,ローカル変数のみ特別なのであろうか? ローカル変数は関数が呼び出されたときの みメモリーが割り当てられる.関数が呼ばれていないときにはメモリーが割り当てられて いないのである.このようにすることにより,必要な時のみメモリーを割り当てることあ でき,効率的にメモリーを使うことができる.また,再帰関数が可能となる.必要な時に メモリーを割り当てることにより,再帰呼び出しを行っても,追加でメモリーの確保がで きる.
中間試験の後に学習することになるが,ローカル変数のメモリー割り当てにはスタックと
呼ばれる仕組みが使われている.このようなことから,ローカル変数の領域をスタッ
ク領域と呼ばれる.また,プログラムの関数が格納される領域をコード領域,グ
ローバル変数や文字列定数が格納される領域をデータ領域と言う.本日の講義の後
半で述べるmalloc()により確保されるメモリー領域をヒープ領域と言う.
1 #include <stdio.h>
2
3 void prt(char *c);
4 int main(void)
5 {
6 static int si=9999;
7 int i=8888;
8
9 printf("main\t%p\t\n", main);
10 printf("prt\t%p\t\n", prt);
11 printf("%d\t%p\n", si, &si);
12 printf("%d\t%p\n", i, &i);
13 prt("HELLO");
14
15 return 0;
16 }
17
18 void prt(char *c)
19 {
20
21 printf("%s\t%p\n",c,c);
22 }
main 0x8048384 prt 0x8048415 9999 0x8049620 8888 0xbff44440 HELLO 0x804850e