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开头对齐。。。