一、sizeof简介及用法
1.sizeof 的简介
(1)sizeof是运算符,它的类型可以是类型,类型又包括整形、字符型、浮点型,结构体类型等,计算的是分配空间的实际字节数。
(2)sizeof在编译时就计算出类型实际所占的字节数大小
(3)sizeof不能计算动态分配空间的大小
2.sizeof 的用法
(a).以整形、字符型、浮点型、结构体类型作为参数
struct Stu
{
char name[20];
int num;
};
int main()
{
int a = 10;
printf(" %zu\n", sizeof(a));
char ch = "A";
printf(" %zu\n", sizeof(ch));
double b = 10.0;
printf(" %zu\n", sizeof(b));
struct Stu stu;
printf(" %zu\n", sizeof(stu));
return 0;
}
(b).以一维数组、二维数组、字符数组作为参数
当数组作为参数的时候,这里我们先来了解数组名的意义
(1)sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
(2)&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
(3)除此之外所有的数组名都表示首元素的地址
int main()
{
int arr[5] = { 1,2,3,4,5 };
printf(" %zu\n", sizeof(arr));
printf(" %zu\n", sizeof(arr + 0));
int arr1[3][4] = { 0 };
printf(" %zu\n", sizeof(arr1));
printf(" %zu\n", sizeof(arr1 + 1));
char str[] = { 'a','b','c','d','e','f' };
printf(" %zu\n", sizeof(str));
printf(" %zu\n", sizeof(str + 1));
return 0;
}
?.sizeof在编译时就计算出类型实际所占的字节数大小
int main()
{
int num = 10;
printf("%zu\n", sizeof(num = 10 + 20));
printf("%d\n", num);
return 0;
}
(d)sizeof不能计算动态分配空间的大小
int main()
{
int* p = (int*)malloc(sizeof(int) * 20);
for (int i = 0; i < 20; i++)
{
*(p + i) = i;
}
printf("%zu\n", sizeof(p));
free(p);
return 0;
}
二、strlen的简介及用法
(1)strlen()是库函数,它计算的是字符串(char*)的字符个数,要引头文件 #include<string.h>.
(2)strlen()计算的是 '\0'前面的字符个数,而不包括'\0'.
(3)strlen与sizeof的区别,在计算字符串个数时,strlen以'\0'为结束标志,而sizeof则是你有多少个字符就计算多少个字符.
1.strlen()函数与操作符sizeof的区别
int main()
{
char str[] = { 'a','b','c','d','e','\0' };
printf("%d\n", strlen(str));
printf("%zu\n", sizeof(str));
return 0;
}
2.模拟实现strlen()函数
int my_strlen(const char* str)
{
assert(str);
char* p = str;
while (*str++);
return str - p - 1;
}
int main()
{
char str[] = "abcd";
int ret = 0;
ret = my_strlen(str);
printf("%d\n", ret);
return 0;
}
3.strlen()函数计算字符数组题型解析
int main()
{
char str[] = { 'a','b','c','d','e','f' };
printf("%d\n", strlen(str));
printf("%d\n", strlen(str + 0));
printf("%d\n", strlen(*str));
printf("%d\n", strlen(str[1]));
return 0;
}
4.strlen()函数计算字符串题型解析
int main()
{
char str[] = "abcdefghi";
printf("%d\n", strlen(str));
printf("%d\n", strlen(str + 0));
printf("%d\n", strlen(*str));
printf("%d\n", strlen(str[1]));
return 0;
}
|