sizeof和strlen的解释

来源:百度知道 编辑:UC知道 时间:2024/06/14 18:39:53
int a[4];
int b[] = {1,2,3};
b[3] = 0;
printf("sizeof(a) = %d\n", sizeof(a)); //16
printf("sizeof(a)*sizeof(int) = %d\n", sizeof(a)*sizeof(int)); //64
printf("sizeof(b)=%d\n", sizeof(b)); //12

1、以上code中,sizeof操作符得到的不是数组的大小么?那sizeof(a)应该是4,sizeof(b)也应该是4,为什么是实际数组长度*int类型占用字节的乘机呢?
2、另外,strlen计算的应该是不包含结尾'\0'的字符数组或字符指针变量的长度,对于其它类型则没有strlen()方法?

谢谢!

首先 a是一个整型数组,这个数组预分配4,每个整型变量占4个字节的空间,所以总共是4×4=16的
如果你声明的是一个char c[4] 那么sizeof(c)的结果就是1×4=4
strlen函数里面就是以'\0'作为判断字符串的结尾的标识 返回的结果不会加上这一个字节的
其实现如下:
int strlen(const char *str)
{
if(NULL == str)
return 0;
char *p = str;
int count = 0;
while(*p++ != '\0')
{
count++;
}
return count;
}

上述代码中, b[3]=0; 写错了吧。a[3]=0;还有点谱!
sizeof 变量或类型在内存中所占mem的长度