文字の 2D 配列にアクセスしようとしています。正しいアドレスにポインターがありますが、どういうわけか参照が機能していません。
char ary[5][8];
char temp[8];
int i;
char **a_ptr = &ary;
for(i=0; i<5; i++){
sprintf(temp, "0x10%d" , i);
strcpy(ary[i] , temp);
printf("~~~%s@0x%x == 0x%x" , ary[i] , &ary[i] , (a_ptr + i));
}
for(i=0; i<5; i++){//This wont work.
printf("~~~%s@0x%x" , *(a_ptr + i) , (a_ptr + i));
}
以下は、ポインターを逆参照するためにブレークする前のこの関数の出力です。
出力形式 : 値@アドレス
0x100@0x5fbff408 == 0x5fbff408
0x101@0x5fbff410 == 0x5fbff410
0x102@0x5fbff418 == 0x5fbff418
0x103@0x5fbff420 == 0x5fbff420
0x104@0x5fbff428 == 0x5fbff428
上記の出力でわかるように、配列値が正しく入力され、a_ptr が正しいアドレスを指しています (&ary[i] == (a_ptr + i))。
しかし、ポインターが従属の場合、そこで壊れます。[] 演算子を使用しても同じことができます。
*(a_ptr + i); //Breaks
a_ptr[i]; //Breaks as well
ただし、(a_ptr + i) は正しいアドレスを指しています。
ありがとう、