• ベストアンサー

C の配列

C で、配列 char a[8]; int b[8]; をメモリの連続した領域に配置し、 a[8] とすれば b[0] がアクセスできるようにしたいのですが可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

きっちり書くと、こんなのとか(little endianを想定します) : #include <stdio.h> union _buf { char a[32]; struct _type_int { char _dummy[8]; int b[0]; } type_int; } buf; int main(int argc,char *argv[]){ buf.type_int.b[0] = 55; printf( "%d, %d\n", buf.a[8], buf.a[9] ); } こっちの方が、てっとり速いでしょうが。 char a[32]; int *b; b = (int*)(a + 8); b[0] = 55;

tttt23
質問者

お礼

回等ありがとうございました。 割と面倒ですね。アセンブラなら簡単なのに。

その他の回答 (3)

noname#30727
noname#30727
回答No.4

構造体を使えば連続します。 ただし、型の大きさは処理系依存なので、アライメントも処理系依存です。 struct foo { char a[8]; int b[8]; }; struct foo bar; bar.a[8] = 1;

tttt23
質問者

お礼

回等ありがとうございます。 > アライメントも処理系依存です。 というところが気になりますね。

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.3

こんな感じでもできますが。 #include <stdio.h> int main(void) { char a[8 + sizeof(int)*8]; int *b; b = (int *)&a[8]; b[0] = 0x12345678; printf("b[0] = %08x, %02x\n", b[0], a[8]); exit(0); }

tttt23
質問者

お礼

回等ありがとうございます。 色々なやり方があるものですね。

  • damejan
  • ベストアンサー率30% (58/192)
回答No.1

変数をそのまま使っている限り、できません。どうしてもそのようなことをしたいのであれば、char型の変数とint型の変数をメンバーにもつ共用体を定義して、この共用体型のポインタ配列を使えばできると思います。 ただ、配列のどこから共用体のメンバ参照をchar変数からint変数へ変えるための処理が必要ですね。

tttt23
質問者

お礼

回等ありがとうございました。 割と面倒ですね。アセンブラなら簡単なのに。

関連するQ&A