【发布时间】:2013-11-26 14:50:09
【问题描述】:
例如,如果我有一个整数数组。
int arr[3] = { 1 , 2 , 3 } ;
unsigned char * a = ( unsigned char* )&arr[0] ;
printf("%d " , *( int* )a ) ;
a += sizeof( int ) ;
printf("%d " , *( int* )a ) ;
a += sizeof( int ) ;
printf("%d " , *( int* )a ) ;
这段代码会在大端和小端架构上产生1 2 3吗?
我假设这适用于包括结构在内的所有类型?
【问题讨论】:
-
由于存储,即写入和后续读取是
int指针,它应该打印1 2 3。你试过这个并找到不同的答案吗? -
@Ganesh 我没有大端机器。
-
问题的大/小端方面也适用于结构,但是将示例扩展到结构可能会引入填充问题。
-
@alk 怎么样,sizeof 不处理这个问题吗?
-
请原谅我不清楚。此问题的当前示例代码中存在 no 填充问题。 “将您的示例扩展到结构可能会引入填充问题”的意思是说处理结构的类似示例可能 引入填充问题。
标签: c pointers endianness memory-address