首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

你们认为在物理存储下,int8[4]和_int32有什么区别

2012-09-08 
你们认为在物理存储上,_int8[4]和_int32有什么区别C/C++ code//定义一个数组:_int8 a[4]//再定义一个变量

你们认为在物理存储上,_int8[4]和_int32有什么区别

C/C++ code
//定义一个数组:_int8 a[4];//再定义一个变量_int32 b;//显然,前者和后者都占了32个字节。那么请问他们在a和b在物理存储上有什么区别,如果没有区别,又怎么区分谁是数组,谁是单独一个变量?


[解决办法]
小尾数处理器上有区别
大尾数没区别
[解决办法]
主要区别在于使用方式,即你把它当成什么类型的来使用,另一个区别在于int8类型在大小端系统下是一致的,int32则不一样,所以你把_int8 a[4]和_int32 b之间互相复制的话,在不同的系统上得到的结果可能不一致。

[解决办法]
跟具体环境有关吧。你可以自己这样试试
C/C++ code
//给a、b赋值char c[5] = {0};memcpy(c,a,4);memset(c,0,5);memcpy(c,b,4);
[解决办法]
错了,应该
C/C++ code
char c[5] = {0};memcpy(c,a,4);memset(c,0,5);memcpy(c,&b,4);
[解决办法]
1、它们访问的最小单位不一样,一个是8bit,一个32bit;
2、它们在物理存储上极有可能不一样,这取决于不同的环境,比如:
a. 在某些平台上会用机器字长来表达一个字节,这样a[4]就相当于int[4];
b. 在某些平台大小端的差异,会导致a[4]和b的字节顺序是不一样的,例如一个是0x12345678,一个是0x78563412。
[解决办法]
探讨

1、它们访问的最小单位不一样,一个是8bit,一个32bit;
2、它们在物理存储上极有可能不一样,这取决于不同的环境,比如:
a. 在某些平台上会用机器字长来表达一个字节,这样a[4]就相当于int[4];
b. 在某些平台大小端的差异,会导致a[4]和b的字节顺序是不一样的,例如一个是0x12345678,一个是0x78563412。

[解决办法]
试了一下,在我的机器上写如下代码

__int8 a[4] = {1, 2, 3, 4};
__int32 b = 5;

在内存中的分布如下:
0x002cfe9c 05 00 00 00 cc cc cc cc cc cc cc cc 01 02 03 04 cc cc cc cc ...
[解决办法]
二进制上是没有区别的,关键是你如何看待它们,即你认为 它们 是什么

想一想 指针为什么非要有 类型才能 解引用

热点排行