■ポインタ復習
ハイジャッキングの本で、ポインタ(int *aみたいな)が出てきて
ちょっと分からんなったからキリン本で復習
void main() {
int *p; #ポインタ宣言、アドレスを格納する
int a = 10;
p = &a; # &aがアドレスを指す、pのポインタにaのアドレスを代入する
printf("a_value is %d\n", a); # 10
printf("a_address is %p\n", &a); # 変数aのアドレス
printf("p_value is %d\n", *p); # ポインタに格納されたアドレスが参照する値=>10
printf("p_address is %p\n", p); # ポインタに格納されたアドレス
printf("\n\n");
}
配列はちょっとややこしい
配列の変数は、変数名自体がアドレスを指しているので
&は必要ないんだとか
文字列(char)も同じ考え方
void main() {
int *p_array; # 配列のアドレスを格納するポインタを宣言
int a_array[] = {1,2,3,4,5};
p_array = a_array; # ポインタに配列a_arrayのアドレスを格納、a_arrayに「&」は不要
printf("a_array address is %p\n", a_array); # 配列の先頭アドレス
printf("a_array[0] is %d\n", a_array[0]); # 配列の先頭の値
printf("p_array[0] is %d\n", *p_array+1); # ポインタが格納するアドレスが指す配列の2つ目の値
printf("p_array address is %p\n", p_array+1); # ポインタが格納するアドレスが指す配列の2つ目の値のアドレス
}
いやー難しい
C:
# ./a.out $(perl -e 'print "A"x32;')
gdb:
(gdb) run $(perl -e 'print "A"x32;')