zoukankan      html  css  js  c++  java
  • 01-题目

    1. sizeof 与 strlen 的区别及使用

    1)两者的返回类型均是size_t

    • sizeof 计算的是分配空间的实际字节数,包括结束字符
    • strlen是计算的空间中字符的个数不包括‘’)。
    size_t strlen(char const* str);

    2)sizeof是运算符,可以用数组、指针、类型、对象、函数做参数 。strlen是函数,只能以char*(字符串)做参数。而且,要想得到的结果正确必须包含 ‘’

    3)sizeof是在编译的时候就将结果计算出来了类型所占空间的字节数,所以以数组名做参数时计算的是整个数组的大小(即使数组有的元素是空的)。正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

        strlen是在运行的时候才开始计算结果,这是计算的结果不再是类型所占内存的大小,数组名就退化指针了。

    char str[20] = "hello world";
    
    printf("strlen(str)=%d
    ",strlen(str)); //=11
    printf("sizeof(str)=%d
    ",sizeof(str)); //20
    
    char *s = (char *)malloc(20);
    strcpy(s, str);
    
    printf("strlen(s)=%d
    ",strlen(s)); //=11
    printf("sizeof(s)=%d
    ",sizeof(s)); //=4  计算的是指针(sizeof(char *)) 的大小  

    4)具体而言,当参数分别是如下时,sizeof返回的值表示的含义如下:

    数组----编译时分配的数组空间的大小;
    指针----存储该指针所用的空间的大小(存储该指针的地址的长度,是长整型,应该是4);
    类型----该类型所占的空间的大小;
    对象----对象的实际占用空间大小;
    函数----函数的返回类型所占的空间大小。函数的返回类型不能是void
    5)size_t 类型为无符号数,计算时注意

    /*判断一*/
    if(strlen(x)>= strlen(y))
    {
    }
    /*判断二*/
    if(strlen(x)- strlen(y)>= 0)
    {
    }
    

     判断二永远为真,因为两个size_t 类型相减其结果仍然是size_t 类型,而 size_t 类型绝不可能是负的。

    具体使用例子见https://www.cnblogs.com/GuoXinxin/p/11651481.html 

    其他参考: 

    https://blog.csdn.net/magic_world_wow/article/details/80500473

    http://c.biancheng.net/view/342.html

    https://blog.csdn.net/songjiasheng1314/article/details/88644827

    https://www.cnblogs.com/bixiaopengblog/p/8036429.html

    2. 无符号数与有符号数之间的运算

    C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1

    3. 求最终的i值

    int i=1;
    for(i=1;i++<8;);
    cout << i;  //输出9
    

    4. sizeof计算struct及union

    计算struct

    字节对齐: 计算机为了快速的读写数据,默认情况下将数据存放在某个地址的起始位置,如:整型数据(int)默认存储 在地址能被4整除的起始位置,字符型数据(char)可以存放在任何地址位置(被1整除),短整型(short)数据存储在地址能被2整除的起始位置。这样字节对齐有助于加快计算机的取数速度,否则就得多花指令周期了。

     

     

  • 相关阅读:
    功能工作第五天终于有点眉目了
    SSM上传图片并保存图片地址到数据库
    基于Maven搭建SSM框架eclipese版本
    菜鸟初到公司应该准备的开发环境
    IDEA+Maven+SSM框架实现的简单的增、删、改、查
    如何在IDEA 中使用Git
    maven-ssm项目整合
    关于线程的知识模块
    百度地图api,使用QT同时绘制多个标注
    win10系统QT5下配置opencv教程
  • 原文地址:https://www.cnblogs.com/GuoXinxin/p/11651509.html
Copyright © 2011-2022 走看看