2012-05-14 8 views
0

私の質問が適切かどうかわかりません。 コードがある場合は....アレイアドレスの操作

int a[2]; 

私は&a[0]%8==1をチェックして、操作a[0]= (a[0] & ~7)を行いたい場合は、やってこの有効な方法は何ですか?

+1

あなたは何をしようとしていますか? –

+0

気象アドレスを見るにはmodで8 ....... modで始まらない場合は012 – user654761

+0

アドレスを確認していますが、内容を調整しています。 –

答えて

3

配列のアドレスを決定するのはあなたではなく、コンパイラ+ロード時に決定するのはコンパイラ+リンカです。配列の要素にのみ割り当てることはできません。

メモリを適切に配置する必要がある場合は、<stdlib.h>malloc()関数を使用します。 C言語標準では、mallocによって返されたポインタが任意の型に対して適切に揃っていることが保証されています。任意のタイプの最小要件が8の場合、これは8バイトの位置合わせされたポインターになります。それでは、あなたがすべきことは次のとおりです。

#include <stdlib.h> 

    int main (void) 
    { 
     int *a; 

     a = malloc (2 * sizeof(*a)); 
     if (a == NULL) { /* Handle out of memory. */ } 
     /* ... */ 
    } 

配列-の-INT int a[2];で宣言されたが、非常に可能性の高い最速の動作をサポートアライメントを持っていますので、これは、実際にやり過ぎのビットです。なぜあなたは8バイトのアライメントを強制することが有利だろうと思いますか?