zoukankan      html  css  js  c++  java
  • sizeof()和strlen()

    sizeof计算的是栈中大小

    sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小

     

    首先解释下sizeof和strlen之间的区别。
    sizeof是一个运算符,其类型结果为size_t,可以用类型做参数,比如在定义一个结构体之后,获得结构体空间大小sizeof(struct )。并且最重要的是sizeof返回的是变量、结构等的实际大小,并且在计算结构体时要注意对其问题。
    strlen首先是一个函数,只能以char * 做参数,返回的是字符的实际长度,不是类型占内存的大小。其结果是运行的时候才计算出来的。

    下面给出相关例子进行解释说明。
    1、 char * s = “0987654321”;
    那么sizeof(s)是多少?sizeof(*s)呢?strlen(s)呢?
    sizeof(s)结果为4,因为s是指向char类型的指针。
    sizeof(*s)结果为1,可以简单看为char(*s)。
    strlen(s)结果为10.为实际字符串长度。

    2、int a[100] = "0987654321";
    那么sizeof(a)是多少?strlen(a)呢?
    sizeof(a)结果为400.  100*4.
    strlen(a)结果为10,也许你会这么认为。这里要注意strlen只能以char * 做参数,所以这里是错误的表达。

    3、struct {                                                         struct {
                    short a;                                                          long a;
                    short b;                                                          short b;
                    short c;                                                          char c;
    }A;                                                                      }B;

    那么sizeof(A)和sizeof(B)结果分别为多少?
    结构体A中的数据类型都是相同的类型,都以2字节对齐,所以sizeof(A)是6字节。
    结构体B中有long:4字节、short:2字节、char :1字节。那么结构体以最长的4字节对其,那么sizeof(B)就是4*3=12喽。不是。在第一个long之后,编译器将short和char放到一块窒执行内存对齐,所以这里结果应该为8字节。


    4、class A                                                                                    class B
    {                                                                                                  {
          public:                                                                                        public:
           int a;                                                                                          double a;
          static int b;                                                                                  float b;
                                                                                                              int c;
            A();                                                                                            char d;
            ~A();                                                                                         B();
    };                                                                                                        ~B();
                                                                                                            };
    那么sizeof(A)和sizeof(B)结果为多少?
    根据之前的分析可以很容易得出sizeof(A)结果为8字节,如果这么想就错了!!!!!!这里的int b是静态变量,那么静态变量存放在哪里?静态变量存放在数据段,而sizeof计算的是栈中大小,所以sizeof(A)结果为4字节. 类B以8字节对齐,结果为24字节。        5、char var[10] int test(char var[]) {          return sizeof(var)   }; 其结果为多少?这里的var[]已经转换为*var了,所以结果为4字节。 6、class B {       float a;       char b;        int c[3]; }; 那么sizeof(B)为多少。 这里是以4字节对齐的,所以结果为4+4+4*3=20字节。

  • 相关阅读:
    PowerDesigner与Eclipse同步开发,PowerDesigner使用教程
    什么是POJO
    java中的<?><T><E>详解Jdk5.0新特性Generic Types (泛型)
    PowerDesigner 数据建模技术视频教程
    SQL如何在已有的一张表中插入一列类型为INTEGER数据 并赋初始值为0
    PowerDesigner中CDM数据类型和PDM数据类型间的mapping (对应关系)详解
    Java Web项目设计数据库时是否需要在表中加备用字段?
    PowerDesigner使用教程
    聚合与组合的区别理解(原)
    The requested list key 'map' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or peopl .
  • 原文地址:https://www.cnblogs.com/reality-soul/p/6155292.html
Copyright © 2011-2022 走看看