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\n",sizeof(char));
    printf("size of int is %d\n",sizeof(int));
    printf("size of double is %d\n",sizeof(double));
    //指针的sizeof
    char *pc="abcde";
    int *num=123;
    printf("size of pc is %d\n",sizeof(pc)); //指针本身是4个字节         ---4
    printf("size of *pc is %d\n",sizeof(*pc)); //指针指向的是内容是1个字节的---1
    printf("size of num is %d\n",sizeof(num)); //---4
    printf("size of *num is %d\n",sizeof(*num)); //--4
    //数组的sizeof,是数组所占用的内存字节数
    //这个时候,数组名不要看成指针
    char a1[]="abcef"; //这是一个数组,值分别就是abcef
    int a2[6]={2};
    //sizeof会把最后的'\0'也算进去
    printf("size of a1 is %d\n",sizeof(a1)); //--6
    printf("size of a2 is %d\n",sizeof(a2)); //--24
    //strlen计算到'\0‘停止,所以会比sizeof少一个
    printf("strlen of a1 is %d\n",strlen(a1)); //--5
    //strlen是计算到'\0'才停止,由于a2没有赋值,所以下面这个打印出来的值是不确定的
    printf("strlen of a2 is %d\n",strlen(a2));  //--24

    //结构体的sizeof,和内存对齐有关
    int ss[100]={1,2,3,4,5};
    printf("size of ss is %d\n",sizeof(ss));

    //strlen 用来计算字符串的长度,参数是char *,不要用来做其他的计算
    char *p="abcdefg";
    printf("strlen of p is %d\n",strlen(p)); //--7
}

 

posted on 2018-02-04 16:17  nasduc  阅读(200)  评论(0编辑  收藏  举报

导航