0

我不知道我的问题是否合适。如果有密码的话......

int a[2];

如果我想检查&a[0]%8==1并进行操作 a[0]= (a[0] & ~7),这是有效的做法吗?

4

1 回答 1

3

决定数组地址的不是你,而是编译器+链接器在编译+加载时决定。(并且您不能分配给数组,只能分配给数组的元素。)

如果您需要适当对齐的内存,请malloc()使用<stdlib.h>. 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 字节对齐是有利的?

于 2012-05-14T08:34:28.727 回答