关于sizeof的问题?

时间:2023-01-29 18:50:18
TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];
其中准备放8个UINT和2个POINT类型数据,想不通怎么等价的?

6 个解决方案

#1


sizeof Operator
sizeof expression

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.

The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses).

When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof returns the size of the entire array. The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.

For related information, see Operators.

Example

// Example of the sizeof keyword
size_t  i = sizeof( int ); 

struct align_depends {
    char c;
    int i;
};
size_t size = sizeof(align_depends);  // The value of size depends on 
                                   //  the value set with /Zp or 
                                   //  #pragma pack

int  array[] = { 1, 2, 3, 4, 5 };     // sizeof( array ) is 20 
                                      // sizeof( array[0] ) is 4 
size_t  sizearr =                        // Count of items in array
   sizeof( array ) / sizeof( array[0] );

--------------------------------------------------------------------------------
Send feedback to MSDN.Look here for MSDN Online resources.

#2


我觉得有点奇怪,"-32767"是一个const char *的常量,不是variable也不是type,怎么能够进行sizeof运算?

#3


sizeof只看类型,不看变量。sizeof("-32767")就是sizeof(const char *)

#4


why not?

sizeof(UINT) * 8 + sizeof(POINT) * 2

#5


可能错了一点,具体内容是这样的!
LPWINDOWPLACEMENT pwp;
TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];
wsprintf(szBuffer, szFormat,
pwp->flags, pwp->showCmd,
pwp->ptMinPosition.x, pwp->ptMinPosition.y,
pwp->ptMaxPosition.x, pwp->ptMaxPosition.y,
pwp->rcNormalPosition.left, pwp->rcNormalPosition.top,
pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom);
AfxGetApp()->WriteProfileString(szSection, szWindowPos, szBuffer);

好像sizeof("-32767")等价于sizeof(LONG),这有点想不通!!!

#6


我想通了,它记录的是字符,而不是LONG,UINT等类型的数据!·
谢谢,大家的帮忙!!!
给分!!!

#1


sizeof Operator
sizeof expression

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.

The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses).

When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof returns the size of the entire array. The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.

For related information, see Operators.

Example

// Example of the sizeof keyword
size_t  i = sizeof( int ); 

struct align_depends {
    char c;
    int i;
};
size_t size = sizeof(align_depends);  // The value of size depends on 
                                   //  the value set with /Zp or 
                                   //  #pragma pack

int  array[] = { 1, 2, 3, 4, 5 };     // sizeof( array ) is 20 
                                      // sizeof( array[0] ) is 4 
size_t  sizearr =                        // Count of items in array
   sizeof( array ) / sizeof( array[0] );

--------------------------------------------------------------------------------
Send feedback to MSDN.Look here for MSDN Online resources.

#2


我觉得有点奇怪,"-32767"是一个const char *的常量,不是variable也不是type,怎么能够进行sizeof运算?

#3


sizeof只看类型,不看变量。sizeof("-32767")就是sizeof(const char *)

#4


why not?

sizeof(UINT) * 8 + sizeof(POINT) * 2

#5


可能错了一点,具体内容是这样的!
LPWINDOWPLACEMENT pwp;
TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];
wsprintf(szBuffer, szFormat,
pwp->flags, pwp->showCmd,
pwp->ptMinPosition.x, pwp->ptMinPosition.y,
pwp->ptMaxPosition.x, pwp->ptMaxPosition.y,
pwp->rcNormalPosition.left, pwp->rcNormalPosition.top,
pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom);
AfxGetApp()->WriteProfileString(szSection, szWindowPos, szBuffer);

好像sizeof("-32767")等价于sizeof(LONG),这有点想不通!!!

#6


我想通了,它记录的是字符,而不是LONG,UINT等类型的数据!·
谢谢,大家的帮忙!!!
给分!!!