• sizeof-strlen


    1例子1 sizeof之数组

    转载:https://www.cnblogs.com/Waming-zhen/articles/4317014.html

    int array[] = {5,2,4,6,1,3};
    char str[] = {"This is a string!"};//str[17]=0x00
    int length1=0,length2=0,length3=0,length4=0,length5=0,length6=0;
    length1 = sizeof(array);//24
    length2 = sizeof(array)/sizeof(array[0]);//6
    
    length3 = sizeof(str);//18
    length4 = sizeof(str)/sizeof(str[0]);//18
    length6 = strlen(str);//17
    

    在平时的编程中,我们会经常用到数组,并且需要知道数组的长度,有时我们可以明确的知道数组的长度,但有时并不,这时,可以借用sizeof(),来获得数组的长度,如下:

    arrayLength = sizeof(array) / sizeof(array[0]);
    

    在使用sizeof() 获得数组长度时,需要注意,如果数组array 和 sizeof() 的使用 是在同一个文件中,那么array在定义时,不需要明确数组长度;如果他们在不同的文件中时,则array在定义时必须明确长度,否则会报错 “ incomplete type is not allowed ”。

    例:

    a.c 文件中定义了数组array

    int array[] = {0,1,2,3,4,5,6,7,8,9};
    

    在a.c文件中我们可以用sizeof() 来获得array的长度

    arrayLength = sizeof(array) / sizeof(array[0]);
    

    或者

    arrayLength = sizeof(array) / sizeof(int);
    

    如果此时我们在b.c文件中使用同样的方法来获得array的长度,那么在编译时会报" incomplete type is not allowed "错误

    whatever is worth doing is worth doing well...

    2 例子2 sizeof数组,字符,字符串

    转载:https://blog.csdn.net/ddl2111/article/details/80372563

    int arr[] = {1, 2, 3, 4};
    
    sizeof(arr) = 16;
    
    char arr[] = "abc";
    
    sizeof(arr) = 4;
    
    strlen(arr)=3
    
    char arr[] = {'1', '2', '3'};
    
    sizeof(arr) = 3;
    
    strlen(arr)=3
    

    注意:当数组作为函数参数传递当时候,表示当是指针,不能用sizeof(名称),求出来当是计算机字长。

    3 sizeof和strlen区别联系

    转载:https://blog.csdn.net/21aspnet/article/details/1539951

    3.1

    char str[20]="0123456789";
    int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以'为字符串结束标记。
    int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响
    

    3.2

    char *str1="absde";
    char str2[]="absde";
    char str3[8]={'a',};
    char ss[] = "0123456789";
    

    输出:

    sizeof(str1)=4
    sizeof(str2)=6;
    sizeof(str3)=8;
    sizeof(ss)=11

    首先说明一点,char类型占一个字节,所以sizeof(char)是1,这点要理解

    str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(str1)=sizeof(char*)=4,在C/C++中一个指针占4个字节

    str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,所以sizeof(str2)取得的是字符串"absde"占的总空间。"absde"中,共有a b s d e 六个字符,所以str2数组的长度是6,所以sizeof(str2)=6*sizeof(char)=6

    str3已经定义成了长度是8的数组,所以sizeof(str3)为8

    str4和str2类似,'0' '1' ... '9'加上''共11个字符,所以ss占的空间是8

    总之,对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char与char[]容易混淆,一定要分清,而且char="aaa"的写法现在不被提倡,应予以避免
    而strlen不区分是数组还是指针,就读到为止返回长度。而且strlen是不把计入字符串的长度的。

  • 相关阅读:
    PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
    关于汽车
    PCB 敷铜间距规则(转)
    有同感的话
    kubernetes学习之二进制部署1.16
    kubernetes网络之Flannel
    Kubernetes学习之原理
    Kubernetes学习之基础概念
    Centos7配置Grafana对接OpenLDAP
    Centos7安装OpenLDAP
  • 原文地址:https://www.cnblogs.com/xuyan123/p/14767578.html
Copyright © 2020-2023  润新知