Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对数组地址的操作_C_Arrays - Fatal编程技术网

C 对数组地址的操作

C 对数组地址的操作,c,arrays,C,Arrays,我不知道我的问题是否恰当。 如果有代码 int a[2]; 如果我想检查&a[0]%8==1并执行操作a[0]=(a[0]&~7),这样做有效吗?决定数组地址的不是你,而是编译器+链接器在编译+加载时决定。(并且不能指定给数组,只能指定给数组的元素。) 如果需要适当对齐的内存,请使用中的malloc()函数。C语言标准保证由malloc返回的指针适合任何类型。如果任何类型的最低要求为8,则这将是一个8字节对齐指针。所以你应该做的是: #include <stdlib.h>

我不知道我的问题是否恰当。 如果有代码

int a[2];

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

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

如果需要适当对齐的内存,请使用
中的
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*a;
a=malloc(2*sizeof(*a));
如果(a==NULL){/*句柄内存不足。*/}
/* ... */
}

这实际上有点过分,因为int数组是用
inta[2]声明的
很可能具有支持最快操作的对齐方式。为什么您认为强制8字节对齐会有好处?

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

如果需要适当对齐的内存,请使用
中的
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*a;
a=malloc(2*sizeof(*a));
如果(a==NULL){/*句柄内存不足。*/}
/* ... */
}

这实际上有点过分,因为int数组是用
inta[2]声明的
很可能具有支持最快操作的对齐方式。为什么您认为强制8字节对齐会有好处?

您想做什么?查看天气地址是mod by 8…..如果不是以mod 8开始,您正在检查地址,但是调整内容。你不能仅仅通过分配给地址来使地址以8开头对齐…你想做什么?要查看天气地址是以8开头的…如果不是以8开头,你是在检查地址,但是调整内容。你不能仅仅通过分配给地址以8开头对齐。。。