89. メモリマップ(図解)
89
int global = 3;
void func2() {
printf(“Hellon”);
}
void func1(int a) {
int b = 1;
func2();
printf(“%d,%dn”, a , b);
}
int main(void) {
func1(1);
}
global 静的
“Hellon”
“%d,%dn”
定数
a
b
スタック(func2)
スタック(func1)
スタック(main)
メモリ
95. ダメな参照(例)
95
int *someFunc() {
int value = 3;
return &value;
}
int main(void) {
int *p = someFunc();
printf(“%dn”, *p);
return 0;
}
main
someFunc
p
value
main
someFunc
p
value
使えないアドレス
159. char (*(*p)())[5];
159
p is pointer to
char (*(*p)())[5];
なう
3 突き当たった)に対応する(まで戻る
戻るときに、*に当たるので、
pointer to をつける
160. char (*(*p)())[5];
160
p is pointer to function(void) returning
char (*(*p)())[5];
なう
2 )に突き当たるまで右に読む
途中で(に出会う。
function(void) returningをつけて次へ
161. char (*(*p)())[5];
161
p is pointer to function(void) returning
char (*(*p)())[5];
なう
2 )に突き当たるまで右に読む
突き当たった
162. char (*(*p)())[5];
162
p is pointer to function(void) returning
pointer to
char (*(*p)())[5];
なう
3 突き当たった)に対応する(まで戻る
戻るときに、*に当たるので、
pointer to をつける
163. char (*(*p)())[5];
163
p is pointer to function(void) returning
pointer to array[5] of
char (*(*p)())[5];
なう
2 )に突き当たるまで右に読む
[が見える。array[5] of をつける
164. char (*(*p)())[5];
164
p is pointer to function(void) returning
pointer to array[5] of char.
char (*(*p)())[5];
なう
3 突き当たった)に対応する(まで戻る
一番最後に)がいると思って、
まだ読んでいないところまで左に戻ると
char.
165. char (*(*p)())[5];
165
p is pointer to function(void) returning
pointer to array[5] of char.
char (*(*p)())[5];
p は「char[5]配列へのポインタ」
を返す関数へのポインタ