详解strlen和sizeof在数组的中的使用(一)

简介: 目录一、前言二、sizeof和strlen他们各自是是什么?有什么区别?sizeof类型的题目题目解析 :32位平台下:​ 64位平台下:

一、前言


    前面我们学习了字符串函数的使用,不过呢字符串函数也基本结束了,现在呢我们来讲点


不一样的东西,有关于sizeof和strlen的使用


二、sizeof和strlen他们各自是是什么?有什么区别?


1.sizeof是一个操作符不需要引头文件,形式一般是sizeof(变量或表达式),计算的是


  所占的空间大小。单位是字节,所以他可以计算任意类型的大小


2.strlen我们相当熟悉,strlen是字符串函数,要引出头文件<string.h>,且他只能计算


  字符的大小,单位是字节,不能用来计算其他类型的大小,遇到'\0'才会停止


3.事实上他们并没有什么关联,一个是操作符,一个是函数。上面标红的部分就是他们的


  主要区别了。


先插播一点知识数组名是首元素地址,只有&数组名和sizeof(数组名)  才表示整个数组,其他的


统统都是首元素地址,只有这两种形式,其中sizeof(数组名)不能加任何东西,也不能少,比如


sizeof(数组名+0),那么此时数组名表示的就是首元素地址指针就是地址在32位/64位平台下是


4/8字节。


仔细理解上面的话,理解之后那么下面上题目:


sizeof类型的题目


#include<stdio.h>
int main()
{
  int arr[] = { 1, 3, 5, 7, 9};
  printf("%d\n", sizeof(arr));
  printf("%d\n", sizeof(arr+1));
  printf("%d\n", sizeof(*arr));
  printf("%d\n", sizeof(&arr));
  printf("%d\n", sizeof(&arr[0]));
    printf("%d\n", sizeof(&*arr));
  printf("%d\n", sizeof(*&arr));
  printf("%d\n", sizeof(&arr+1));
  printf("%d\n", sizeof(*arr+1));
  printf("%d\n", sizeof(arr+0));
  return 0;
}


题目解析 :


第一个sizeof(arr),计算的是整的数组的大小所以结果是5*4=20字节 。    


第二个sizeof(arr+1)其中arr是首元素地址,arr+1表示的是第二个元素的地址,既然是地址,那就是4或8字节,不理解的话可以看看上面的插播的知识。


 第三个sizeof(*arr),*arr表示拿到首元素,而首元素类型是int,所以大小是4字节。


第四个sizeof(&arr),&arr表示拿到整个数组的地址,既然是地址所以是4或8字节。


第五个sizeof(&arr[0]),&arr[0]表示拿到了第一个元素的地址,所以是4或8字节。


第六个sizeof(&*arr),因为&和*是同一优先级的,但是结合性是从从右到左,所以先*arr表示拿到首元素,再&(*arr),表示拿到了第一个元素的地址,所以是4或8字节。


第七个是sizeof(*&arr),先&arr表示拿到整块数组的地址,*(&arr),表示拿到整个数组的所有的元素,因为数组的类型是int,所以是5*4=20字节。


第八个是sizeof(&arr+1),&arr拿到整个数组的地址,&arr+1跳过整个数组,得到下块的地址因为sizeof只是算出,不是具体执行,所以不存在越界访问,既然是地址,是4或8字节。


第九个是sizeof(*arr+1),arr是首元素,*arr拿到首元素,(*arr+1)所以是首元素自增一,(即加1)因为是int类型,所以是4字节。


第十个是sizeof(arr+0),单独的sizeof(arr)表示整个数组,但是arr+0表示首元素地址,所以是4或8字节。


在vs编译器下运行结果如下:


32位平台下:

微信图片_20220105140700.png


64位平台下:


微信图片_20220105140822.png




目录
相关文章
|
9月前
strlen和sizeof详解
strlen和sizeof详解
60 0
|
4月前
|
Serverless
sizeof和strlen的区别【详解】
sizeof和strlen的区别【详解】
30 0
|
4月前
|
C语言
strlen和sizeof的区别
strlen和sizeof的区别
39 0
|
4月前
strlen与sizeof的区别
strlen与sizeof的区别
22 0
|
5月前
sizeof和strlen的对比
sizeof和strlen的对比
22 0
|
7月前
sizeof与strlen区别
sizeof是关键字,参数可以是各种数据(包括函数,类型,对象,数组,指针……)用于计算数据所占字节大小 strlen是函数,参数类型必须是字符型指针(char *),用于计算字符串,从字符串的第一个地址开始遍历,直到遇到‘\0’停止
46 0
|
10月前
sizeof与strlen练习
sizeof与strlen练习
36 0
|
存储 编译器 C++
sizeof 与strlen的区别与联系
sizeof 与strlen的区别与联系
sizeof 与strlen的区别与联系
|
存储 应用服务中间件 nginx
strlen 与 sizeof 的区别
strlen 与 sizeof 的区别
135 0