出産前後の痔にはご注意!

C で、配列

char a[8];
int b[8];

をメモリの連続した領域に配置し、

a[8] とすれば b[0] がアクセスできるようにしたいのですが可能でしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

きっちり書くと、こんなのとか(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;
    • good
    • 0
この回答へのお礼

回等ありがとうございました。

割と面倒ですね。アセンブラなら簡単なのに。

お礼日時:2003/05/17 11:33

構造体を使えば連続します。


ただし、型の大きさは処理系依存なので、アライメントも処理系依存です。

struct foo
{
char a[8];
int b[8];
};

struct foo bar;

bar.a[8] = 1;
    • good
    • 0
この回答へのお礼

回等ありがとうございます。

> アライメントも処理系依存です。

というところが気になりますね。

お礼日時:2003/05/18 10:28

こんな感じでもできますが。



#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);
}
    • good
    • 0
この回答へのお礼

回等ありがとうございます。

色々なやり方があるものですね。

お礼日時:2003/05/17 15:46

変数をそのまま使っている限り、できません。

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

回等ありがとうございました。

割と面倒ですね。アセンブラなら簡単なのに。

お礼日時:2003/05/17 11:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング