• sizeof和strlen


    sizeof是单目运算,strlen是函数

    一般的用法:

    计算字符串的长度用strlen,其参数是char *

    计算数组的空间用sizeof,计算数组的个数用sizeof(数组)/sizeof(数组类型)。计算字符型数组的长度,需要减1,这个时候用strlen就好了,见下面例子中计算a1的长度。

    另外需要注意的是:

    int *p=a[10];

    sizeof(a)将是40,而sizeof(p)是4;

    另外如果把数组名作为参数传入函数,其会退化成指针,也不能用 sizeof计算数组的长度,所以经常需要把长度作为参数传进去。

    而字符串指针或者字符串数组就不一样了,strlen(*p)可以计算长度。

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        printf("size of char is %d
    ",sizeof(char));
        printf("size of int is %d
    ",sizeof(int));
        printf("size of double is %d
    ",sizeof(double));
        //指针的sizeof
        char *pc="abcde";
        int *num=123;
        printf("size of pc is %d
    ",sizeof(pc)); //指针本身是4个字节         ---4
        printf("size of *pc is %d
    ",sizeof(*pc)); //指针指向的是内容是1个字节的---1
        printf("size of num is %d
    ",sizeof(num)); //---4
        printf("size of *num is %d
    ",sizeof(*num)); //--4
        //数组的sizeof,是数组所占用的内存字节数
        //这个时候,数组名不要看成指针
        char a1[]="abcef"; //这是一个数组,值分别就是abcef
        int a2[6]={2};
        //sizeof会把最后的''也算进去
        printf("size of a1 is %d
    ",sizeof(a1)); //--6
        printf("size of a2 is %d
    ",sizeof(a2)); //--24
        //strlen计算到'‘停止,所以会比sizeof少一个
        printf("strlen of a1 is %d
    ",strlen(a1)); //--5
        //strlen是计算到''才停止,由于a2没有赋值,所以下面这个打印出来的值是不确定的
        printf("strlen of a2 is %d
    ",strlen(a2));  //--24
    
        //结构体的sizeof,和内存对齐有关
        int ss[100]={1,2,3,4,5};
        printf("size of ss is %d
    ",sizeof(ss));
    
        //strlen 用来计算字符串的长度,参数是char *,不要用来做其他的计算
        char *p="abcdefg";
        printf("strlen of p is %d
    ",strlen(p)); //--7
    }
  • 相关阅读:
    Unrecognized attribute 'targetFramework'.错误解决
    [译]Razor内幕之模板
    [译]Razor内幕之解析
    Java下载中文乱码问题解决方法
    获取矩形中心点与矩形外某点连线和矩形交点的算法
    做产品开发的感想
    [译]Razor内幕之表达式
    Could not find the main class. Program will exit.
    基于SAML的单点登录.NET代理端实现方案
    Linux内核虚拟内存的管理结构说明
  • 原文地址:https://www.cnblogs.com/nasduc/p/8413445.html
Copyright © 2020-2023  润新知