我们之前学习过strlen和sizeof的区别:
1.strlen是一个库函数使用时需要引用#include<string.h>这个头文件,而sizeof是一个运算符号;
2.strlen计算的是'\0'之前的字符个数,sizefo计算的是所占空间内存的大小,单位是字节;
3.strlen计算时不包含'\0',而sizeof包含'\0';
4.strlen遇到'\0'才结束;
5.strlen只能用char做参数,sizeof可以用类型做参数;
6.sizeof的类型是unsigned int ,是一个无符号的整型;
现在可以更深入的学习并运用好sizeof和strlen在数组和指针的运用里:
看下面的题目来提升一下对sizeof和strlen的认知吧!
1.sizeof在整型数组中的使用:
#include<stdio.h>
int main()
{
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a)); // 16
//sizeof(数组名)是指整个数组
//计算的是整个数组的大小,单位是字节
printf("%d\n", sizeof(a+0)); // 4/8
//sizeof(数组名+0)指的是首元素的地址
//a不是单独放在sizeof里面,也没有取地址,所以指的是首元素,a+0还是首元素
printf("%d\n", sizeof(*a));// 4/8
//*a都是指a首元素的地址,*是对a的首元素解引用,找到的就是首元素的地址
printf("%d\n", sizeof(a+1));// 4/8
//这里的a指的是首元素的地址
//a+1就是指第二个元素的地址
printf("%d\n", sizeof(a[1]));// 4/8
//a[0]是指数组的第一个元素
//a[1]就是指数组的第二个元素
printf("%d\n", sizeof(&a));// 4/8
//&a代表的整个数组的起始地址
//数组的地址也是地址
printf("%d\n", sizeof(*&a));// 16
//&a --->int(*)[4]
//&a拿到的是数组名的地址,类型是int(*)[4]一种数组指针
//数组指针解引用找到的是数组
//*&a --> a
printf("%d\n", sizeof(&a+1));// 4/8
//&a取的是整个数组的地址,&a+1就是在整个数组之后的一个元素
printf("%d\n", sizeof(&a[0]));// 4/8
//&a[0]取的是整个数组的第一个元素
printf("%d\n", sizeof(&