2012-05-14 49 views
0

我不知道我的問題是否合適。 如果有一個代碼....陣列地址操作

int a[2]; 

如果我要檢查&a[0]%8==1並做了手術a[0]= (a[0] & ~7),就是做的這個有效方法是什麼?

+1

你想做什麼? –

+0

查看天氣地址是mod 8 ......如果不是以mod 8開頭 – 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字節對齊會有好處?