自学内容网 自学内容网

c语言中“sizeof”和“strlen”的区别

sizeof:

    是操作符,不是函数

    计算变量所占的内存空间的大小,单位是字节,如果是类型的话,计算的是使用类型创建所占空间的大小。

    只关注内存空间,不管什么类型。

strlen:

       是函数库函数):求字符串的长度,只能针对字符串(字符数组)

       统计字符串中“\0"前的字符个数。关注是否有“\0”,如果没有,会持续往后找,可能会越界

例题:

int main(){

    char arr1[]={'a','b','c'};

char arr2[]="a b c";          //末尾有隐藏的\0

printf("%zd\n",strlen(arr1));      //随机值,因为找不到\0会一直往下找,会出现随机值。

printf("%zd\n",strlen(arr2));      // 3

printf("%zd\n",sizeof(arr2));     // 3

printf("%zd\n",sizeof(arr2));     // 4

数组和指针:

整型数组:

数组名是首元素地址,除了“sizeof(数组名)”和“&(数组名)

int main(){

int a[]={1,2,3,4};

pritnf("%zd\n",sizeof(a));        //16  因为数组名a单独在sizeof的内部,a表示整个数组

pritnf("%zd\n",sizeof(a+0));    //4或者8   数组名+0还是首元素地址,看是X64,还是X86.

pritnf("%zd\n",sizeof(*a));       //4          a表示首元素地址,但是*a就是首元素a[0]。

pritnf("%zd\n",sizeof(a+1));    //4或者8    首元素地址+1,表示a[1].

pritnf("%zd\n",sizeof(a[1]));    //4              就是表示元素a[1]。

pritnf("%zd\n",sizeof(&a));      //4或者8.    &a--整个数组地址,只要是地址就是4或者8.

pritnf("%zd\n",sizeof(*&a));    //16             其中的*和&相互低消了,就是访问的整个数组a

pritnf("%zd\n",sizeof(&a+1));  //4或者8.     &a+1--就是表示跳过整个数组后那个位置的地址。

pritnf("%zd\n",sizeof(&a[0]));  //4或者8.      

pritnf("%zd\n",sizeof(&a[0]+1));//4或者8.    首元素+1就是第二个元素的地址。

以上有关只要是地址就是4或者8 的可以去看7月 30号“c语言中的指针变量大小,以及指针类型的意义”文章里面有介绍。

字符数组

int main(){

char arr[]={'a','b','c','d','e','f'};

printf(%d\n",sizeof(arr));          //6             数组单独放在sizeof里面表示整个数组

printf(%d\n",sizeof(arr+0));      //4或者8    数组名表示首元素地址

printf(%d\n",sizeof(*arr));         //1              arr表示首元素地址,*arr就是首元素

printf(%d\n",sizeof(&arr));        //4或者8     &(数组)是整个数组

printf(%d\n",sizeof(&arr+1));    //4或者8      表示跳过整个数组后的位置的地址

printf(%d\n",sizeof(&arr[0]+1));//4或者8     

printf(%d\n",sizeof(arr));           //随机值     若是没有发现‘\0’就会继续往下找。

printf(%zd\n",strlen(arr+0));      //随机值

printf(%zd\n",strlen(*arr));        //‘a’--97直接系统崩了,传给strlen,会以为97是地址,就去访问

printf(%zd\n",strlen(arr[1]));      //同上

printf(%zd\n",strlen(&arr));        //随机值    取数组的地址

printf(%zd\n",strlen(&arr+1));    //随机值

printf(%zd\n",strlen(&arr[0]+1)); //随机值

return 0;

}


原文地址:https://blog.csdn.net/2401_83201682/article/details/142422689

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!