通常一个short
变量必须在 2 字节对齐地址,但是如果我试图将它指向一个奇数地址有什么问题吗?
我在 VC++ 2008 上尝试了这段代码,它运行正常,你能解释一下为什么吗?
unsigned char ca[10];
unsigned short *s1 = 0;
memset(ca, 1, 10);
s1 = (unsigned short*)&ca[0];
printf("s1 = %d\n", *s1);
s1 = (unsigned short*)&ca[1];
printf("s1 = %d\n", *s1);
在上面的代码片段中,ca[0]
或者ca[1]
肯定有一个在奇数地址,所以它不是 2 字节对齐,而是s1
完美地分配给ca[0]
和ca[1]
。
那么这段代码是否如预期的那样正确,是否建议这样做?我想要一个可移植的方法,它可以将字节数组中的任意两个字节作为短变量读取,以便在几乎所有平台/编译器中都能正常工作。
非常感谢。