你们认为在物理存储下,int8[4]和_int32有什么区别
你们认为在物理存储上,_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++ codechar 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。
[解决办法]
[解决办法]
试了一下,在我的机器上写如下代码
__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 ...
[解决办法]
二进制上是没有区别的,关键是你如何看待它们,即你认为 它们 是什么
想一想 指针为什么非要有 类型才能 解引用