C语言 字节大小问题
UCHAR*putCharArray[10][10];typedefunionunRec{ULONGulIndex;USHORTusLevel[6]'\;UCHARucP...
UCHAR *putCharArray[10][10];
typedef union unRec
{
ULONG ulIndex;
USHORT usLevel[6]'\;
UCHAR ucPos;
}REC_S;
REC_S stMax,*pstMax;
四字节对齐方式时:
sizeof(pucCharArray) = ?
sizeof(stMax) = ?
sizeof(pstMax) = ?
sizeof(*pstMax) = ?
UCHAR *pszTest ="Hello";
UCHAR aucTest[]"Hello";
请问 sizeof(pszTest)=?
sizeof(*pszTest)=?
sizeofaucTest=?
能讲一下原因吗?谢谢各位大侠了。 展开
typedef union unRec
{
ULONG ulIndex;
USHORT usLevel[6]'\;
UCHAR ucPos;
}REC_S;
REC_S stMax,*pstMax;
四字节对齐方式时:
sizeof(pucCharArray) = ?
sizeof(stMax) = ?
sizeof(pstMax) = ?
sizeof(*pstMax) = ?
UCHAR *pszTest ="Hello";
UCHAR aucTest[]"Hello";
请问 sizeof(pszTest)=?
sizeof(*pszTest)=?
sizeofaucTest=?
能讲一下原因吗?谢谢各位大侠了。 展开
3个回答
展开全部
typedef union unRec //联合结构,结构的大小取决于其中最大的那个的大小
{
ULONG ulIndex; // 4
USHORT usLevel[6]; // 12
UCHAR ucPos; //1
}REC_S; //大小为12
REC_S stMax,*pstMax;
UCHAR *pszTest ="Hello";
pszTest为字符串指针,大小为2个字节(指针大小,VC中为4字节)
这个跟aucTest一样,都是指针,所以都是2
*pszTest就是pszTest[0],是UCHAR了,也就是一个字节
UCHAR aucTest[]"Hello";
{
ULONG ulIndex; // 4
USHORT usLevel[6]; // 12
UCHAR ucPos; //1
}REC_S; //大小为12
REC_S stMax,*pstMax;
UCHAR *pszTest ="Hello";
pszTest为字符串指针,大小为2个字节(指针大小,VC中为4字节)
这个跟aucTest一样,都是指针,所以都是2
*pszTest就是pszTest[0],是UCHAR了,也就是一个字节
UCHAR aucTest[]"Hello";
展开全部
sizeof(pucCharArray) = 4
sizeof(stMax) = 12 //联合 成员共享内存。取最大的
sizeof(pstMax) = 4 //指针
sizeof(*pstMax) = 12 //还是联合
后面两个
4 //指针
6 //“hello”+ “\0” 5+1
sizeof(stMax) = 12 //联合 成员共享内存。取最大的
sizeof(pstMax) = 4 //指针
sizeof(*pstMax) = 12 //还是联合
后面两个
4 //指针
6 //“hello”+ “\0” 5+1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就这个问题这就引出了大端(Big Endian)与小端(Little Endian)的问题。
如果LSB在MSB前面, 既LSB是低地址, 则该机器是小端; 反之则是大端. DEC (Digital Equipment Corporation, 现在是Compaq公司的一部分)和Intel的机器一般采用小端. IBM, Motorola, Sun的机器一般采用大端. 当然, 这不代表所有情况. 有的CPU即能工作于小端, 又能工作于大端, 比如ARM, PowerPC, Alpha. 具体情形参考处理器手册.
举个例子来说名大小端: 比如一个long x, 地址为0x100, 它的值为0x1234567. 则它所占据的0x100, 0x101, 0x102, 0x103地址组织如下:
大端(Big Endian)
0x100 0x101 0x102 0x103
01 23 45 67
小端(Little Endian)
0x100 0x101 0x102 0x103
67 45 23 01
我们常用的处理应该都是小端(Little Endian)
不知道说清楚了没有
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
如果LSB在MSB前面, 既LSB是低地址, 则该机器是小端; 反之则是大端. DEC (Digital Equipment Corporation, 现在是Compaq公司的一部分)和Intel的机器一般采用小端. IBM, Motorola, Sun的机器一般采用大端. 当然, 这不代表所有情况. 有的CPU即能工作于小端, 又能工作于大端, 比如ARM, PowerPC, Alpha. 具体情形参考处理器手册.
举个例子来说名大小端: 比如一个long x, 地址为0x100, 它的值为0x1234567. 则它所占据的0x100, 0x101, 0x102, 0x103地址组织如下:
大端(Big Endian)
0x100 0x101 0x102 0x103
01 23 45 67
小端(Little Endian)
0x100 0x101 0x102 0x103
67 45 23 01
我们常用的处理应该都是小端(Little Endian)
不知道说清楚了没有
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询