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

简介: 目录一、前言二、sizeof在指针中的试题:解析:vs编辑器验证:32位平台: 64位平台:

一、前言


前面一节我们已经讲过了有关于strlen在字符数组中的使用,以及strlen使用时候的注意事项


譬如只能在字符数组中使用,遇到'\0'才会停止,传过来的是地址,传值会出错等等之类的,不太


清除的小伙伴可以往回翻翻看看。那么废话不多说,咱们今天要讲的是sizeof在指针的使用。


二、sizeof在指针中的试题:


#include<stdio.h>
int main()
{
  char *p = "abcdef";
  printf("%d\n", sizeof(p));
  printf("%d\n", sizeof(p+1));
  printf("%d\n", sizeof(*p));
  printf("%d\n", sizeof(*p+1));
  printf("%d\n", sizeof(p[0]));
  printf("%d\n", sizeof(&p));
  printf("%d\n", sizeof(&p+1));
  printf("%d\n", sizeof(&p[1]+1));
  return 0;


题目简单分析:char *p = "abcdef",定义了一个指针去接受一个字符串常量,其中p只是接受了


字符串常量的首元素地址。而不是存放整个字符串的地址(因为是char型,人家根本存不下这么大


长一坨,只能存一个),事实上只要记住首元素地址就完全够了,因为可以通过首元素地址找到


整个字符串(因为字符串的地址也是连续存放的)。


解析:


第一题:sizeof(p),p是存放字符串的首地址,既然是地址,那就是4或8字节。(注意:这个可不是数组名呀,这个是指针,一定要注意区分)

第二题:sizeof(p+1),p是字符串常量的首元素地址,p+1就是第二个元素地址,还是地址那就是4或8字。(相信小伙伴们已经非常熟悉了吧,反正我已经讲烂了)

第三题:sizeof(*p),p表示首元素地址,*p表示拿到首元素的值了,且该元素的值是char类型的,所以大小是1字节。

第三题;sizeof(*p+1),这题其实之前已经讲过了,再讲一遍吧,*p表示的是首元素的值,其实就是a的值,所以为a+1,a是字符型,1是int类型,两者相加,会发生自动类型转化,char会自动转化为int(可以巧记为低字节转高字为自动,反之则是强迫),所以结果是a的ascll码值加一,得到98为整形,所以就相当于计算了整形的大小为4字节。

第四题:sizeof(p[0]),p[0]等价于*(p+0),所以表示的是首元素地址加0,还是首元素地址在*(首元素地址),得到的是首元素的值,为char类型所以大小是1字节。

第五题:sizeof(&p),&p是首元素地址,所以大小是4或8字节。

第六题:sizeof(&p+1),还是地址是第二个元素的地址,只要是地址结果就是4或8字节。

第七题:sizeof(&p[1]+1),&p[1]+1表示的是跳过第二元素的地址,即三个元素的地址,只要是地址,所以是4或8字节。

vs编辑器验证:


32位平台:


微信图片_20220105141928.png


64位平台:


微信图片_20220105142018.png


目录
相关文章
|
5月前
|
C语言
sizeof与strlen的使用及其区别
sizeof与strlen的使用及其区别
sizeof与strlen的使用及其区别
|
1月前
|
编译器 C++
sizeof 和 strlen 的区别
`sizeof` 和 `strlen` 是 C 和 C++ 中常用的运算符/函数,功能和用途不同
63 11
|
6月前
|
存储 编译器
strlen()和sizeof()的区别
strlen()和sizeof()的区别
49 0
strlen和sizeof详解
strlen和sizeof详解
84 0
|
6月前
|
Serverless
sizeof和strlen的区别【详解】
sizeof和strlen的区别【详解】
56 0
|
11月前
|
C语言
strlen和sizeof的区别
strlen和sizeof的区别
86 0
|
11月前
strlen与sizeof的区别
strlen与sizeof的区别
73 0
sizeof与strlen区别
sizeof是关键字,参数可以是各种数据(包括函数,类型,对象,数组,指针……)用于计算数据所占字节大小 strlen是函数,参数类型必须是字符型指针(char *),用于计算字符串,从字符串的第一个地址开始遍历,直到遇到‘\0’停止
80 0
sizeof与strlen练习
sizeof与strlen练习
51 0
|
存储 编译器 C++
sizeof 与strlen的区别与联系
sizeof 与strlen的区别与联系
115 0
sizeof 与strlen的区别与联系