ってことで Dimage X31 を発注しました。 明後日ぐらいに荷物が着くのでしょうか。 清水さんに Dimage ってどんな具合か聞いてみたところ、写真の縁のほうが歪んだりしているぐらいで、あとは悪くないみたい、な感想だったので、Dimage を購入することに。 毎日まいにち昼ごはんの写真を撮っているボクに、料理とライティング っていうページを教えてもらったり。
Kinesis が本番投入されたので、そのかわりに職場から持ち帰ってきた Happy Hacking Keyboard Lite 2 を接続して写真をパチりととったのです。
int型のポインタを1つ加算・減算すると、IA-32 では int が 4byte (32bit) なので 4byte分 加算・減算される。 void型やchar型の場合は 1バイト (8bit) 分 加算・減算される。 っていうことをすっかり忘れて int 型へのポインタ変数で次の配列を取得するときに ptr += num * sizeof(int); とかしてしまって、実際は配列の3つ先をさすポインタになってしまって、配列長の4分の1を過ぎたあたりから Segv ったりしだして。 それに気づくのに少し時間がかかったり。 同様なのですが、IA-32 では long型へのポインタの場合は 4byte (32bit)、long long 型へのポインタは 8byte (64bit) になります。
以下、確認したときの手順:
$ uname -srm Linux 2.4.26-co-0.6.1 i686
$ cat ptr++.c #include <stdio.h>
int main (int argc, char** argv) { int a, *p_int; void *p_void; char *p_char; p_int = &a; p_void = (void*)&a; p_char = (char*)&a; printf("sizeof(int)=%d, sizeof(void)=%d, sizeof(char)=%d\n", sizeof(int), sizeof(void), sizeof(char)); p_int++; p_void++; p_char++; printf("%p -> p_int=%p, p_voi=%p, p_char=%p\n", &a, p_int, p_void, p_char); return 0; } $ gcc ptr++.c -o ptr++ $ ./ptr++ sizeof(int)=4, sizeof(void)=1, sizeof(char)=1 0xbffffda4 -> p_int=0xbffffda8, p_voi=0xbffffda5, p_char=0xbffffda5