对阵列地址的操作

时间:2012-05-14 07:15:52

标签: c arrays

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

int a[2];

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

1 个答案:

答案 0 :(得分: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 a[2];声明的数组int很可能具有支持最快操作的对齐。为什么你认为强制8字节对齐会有利?