当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

关于sizeof的相关问题浅显解释

    一、好首先看看sizeof和strlen在MSDN上的定义:

    首先看一MSDN上如何对sizeof进行定义的:

 

    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.
    然后再看一下对strlen是如何定义的:

    strlen

    Get the length of a string.

    Routine Required Header:
    strlen <string.h>

    size_t strlen( const char *string );
    Parameter
    string:Null-terminated string
    Libraries
    All versions of the C run-time libraries.

    Return Value
    Each of these functions returns the number of characters in string, excluding the terminal
    NULL. No return value is reserved to indicate an error.

    Remarks
    Each of these functions returns the number of characters in string, not including the
    terminating null character. wcslen is a wide-character version of strlen; the argument of
    wcslen is a wide-character string. wcslen and strlen behave identically otherwise.

    二、由几个例子说开去。

    第一个例子:

    char* ss = "0123456789";
    sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针
    sizeof(*ss) 结果 1 ===》*ss是第一个字符

    char ss[] = "0123456789";
    sizeof(ss) 结果 11 ===》ss是数组,计算到\\\\\\\\0位置,因此是10+1
    sizeof(*ss) 结果 1 ===》*ss是第一个字符

    char ss[100] = "0123456789";
    sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
    strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\\\\\\\\0为止之前

    int ss[100] = "0123456789";
    sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4
    strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以\\\\\\\\'\\\\\\\\'\\\\\\\\0\\\\\\\\'\\\\\\\\'结尾的

    char q[]="abc";
    char p[]="a\\\\\\\\n";
    sizeof(q),sizeof(p),strlen(q),strlen(p);
    结果是 4 3 3 2
    第二个例子:

    class X
    {
    int i;
    int j;
    char k;
    };
    X x;
    cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐
    cout<<sizeof(x)<<endl; 结果 12 同上

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接