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 }