bcc32 コンパイラにてC言語の勉強をしていたところ、不可解な現象に遭遇しました。
現象的に、bcc32のバグではないかと考えているのですが、如何でしょうか。
bcc32のバージョン:
Borland C++ Compiler 5.5
質問したいこと:
1.自分のPC以外でも、同様の現象が発生するか
2.何故このような現象が発生するのか(可能であれば)
#include <stdio.h>
int main()
{
char a, b;
char *c;
a=1;
b=2;
c = &b;
c++;
*c = 3;
printf( "a:%d\n",&a );/* コメントアウトすると結果が変わる */
printf( "b:%d\n",&b );
printf( "c:%d\n",c );
printf( "a:%d\n",a );
printf( "b:%d\n",b );
printf( "c:%d\n",*c );
return 0;
}
a:1638228
b:1638227
c:1638228
a:3
b:2
c:3
実行結果(コメントアウトした場合):
b:1638227
c:1638228
a:1
b:2
c:3
仮説:
a と *cは同じアドレスを差しており、 *c の変更は a にも反映されるはず。
しかし、 &a を参照する処理がない場合、 *c の変更は a に反映されない。
そのような仕様はC言語には存在しないため、バグではないか。