C语言----字符数组指针

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

sizeof分析类型就可以计算所占的内存空间的大小;
(1)printf("%d\n", sizeof(arr));

数组名单独放进里面,计算整个数组大小,所以是6字节;

(2)printf("%d\n", sizeof(arr+0));

第一个元素地址,是地址就是4或8,不会因为 是char类型而想成是1,因为无论是什么类型,地址的大小是不变的,就是4或8;


(3)printf("%d\n", sizeof(*arr));

首元素地址,解引用后是第一个元素,char类型,1字节;


(4)printf("%d\n", sizeof(arr[1]));

第二个元素,类型char,大小是1字节;


(5)printf("%d\n", sizeof(&arr));

数组地址,4或8字节;


(6)printf("%d\n", sizeof(&arr+1));

还是地址,虽然跳过整个数组,是地址就是4或8;


(7)printf("%d\n", sizeof(&arr[0]+1));

第二个元素地址,4或8字节;

-----------------------------------------------------------------------------------------------------------------

2.char arr[] = {'a','b','c','d','e','f'};
(1)printf("%d\n", strlen(arr));

求字符串的长度,统计字符串斜杠0之前的字符个数,字符数组里面无斜杠0,会一直向后面找,答案是随机值;
(2)printf("%d\n", strlen(arr+0));

这个还是从第一个向后找,所以是随机值;
(3)printf("%d\n", strlen(*arr));

strlen参数是地址,根据提供的地址向后找,*arr是首元素解引用就是字符a,ASCII值是97,会从97地址处开始找,所以是非法访问,非法访问97地址处的数值;


(4)printf("%d\n", strlen(arr[1]));

这个传递的参数同上,是98地址,非法访问;


(5)printf("%d\n", strlen(&arr));

chat(*)[6]转换成char*类型,数组的地址,和首个元素地址值相同,依然是从第一个元素位置开始找,所以是随机值;


(6)printf("%d\n", strlen(&arr+1));

跳过整个数组,还是地址,从最后开始找,是随机值;


(7)printf("%d\n", strlen(&arr[0]+1));

从第二个元素的地址处往后找,是随机值;

这些随机值不是没有规律的,他们之间相差的是对应的字符的个数;

---------------------------------------------------------------------------------------------------------------------------------

3.char arr[] = "abcdef";

这里的末尾有了斜杠0
(1)printf("%d\n", sizeof(arr));

7个字节;

----------------------------------------
(2)printf("%d\n", sizeof(arr+0));

首元素地址,4/8

---------------------------------------------
(3)printf("%d\n", sizeof(*arr));

首个元素,1字节;

--------------------------------------------
(4)printf("%d\n", sizeof(arr[1]));

第二个元素,1字节;

------------------------------------------------
(5)printf("%d\n", sizeof(&arr));

整个数组地址,4/8;

----------------------------------------------
(6)printf("%d\n", sizeof(&arr+1));

还是地址,4/8;

----------------------------------------------
(7)printf("%d\n", sizeof(&arr[0]+1));

还是地址,4/8;

---------------------------------------------------------------------------------------------------------------------------------

4.char arr[] = "abcdef";
printf("%d\n", strlen(arr));

6字节;

-------------------------------------
printf("%d\n", strlen(arr+0));

6字节;

--------------------------------------
printf("%d\n", strlen(*arr));

第一个元素,是字符a,这个是错误;

----------------------------------------
printf("%d\n", strlen(arr[1]));

第二个元素,字符b,这个是错误;

---------------------------------------------
printf("%d\n", strlen(&arr));

数组地址,6字节;

-------------------------------------------
printf("%d\n", strlen(&arr+1));

跳过整个数组,也跳过了斜杠0,是随机值;

-------------------------------------------
printf("%d\n", strlen(&arr[0]+1));

跳过第一个字符,5字节;

--------------------------------------------------------------------------------------------------------------------------------

5.char *p = "abcdef";

这里p指向第一个元素地址
printf("%d\n", sizeof(p));

是地址,就是4/8字节;

------------------------------------
printf("%d\n", sizeof(p+1));

指向b字符,还是地址,是4/8字节;

-----------------------------------
printf("%d\n", sizeof(*p));

访问a字符,大小是1字节;

------------------------------------
printf("%d\n", sizeof(p[0]));

*(p+0)相当于*p,是1字节

------------------------------------
printf("%d\n", sizeof(&p));

是地址,&p是二级指针,是p所在处的地址,地址是4/8;

--------------------------------------
printf("%d\n", sizeof(&p+1));

还是地址,是4/8字节;

--------------------------------------
printf("%d\n", sizeof(&p[0]+1));

指向字符b,是地址,是4/8字节;

---------------------------------------------------------------------------------------------------------------------------

6.char *p = "abcdef";
printf("%d\n", strlen(p));

从a开始,6字节;

-----------------------------------
printf("%d\n", strlen(p+1));

从b开始,5字节;

-----------------------------------
printf("%d\n", strlen(*p));

非法访问,97地址处的内存,错误的;

----------------------------------------------
printf("%d\n", strlen(p[0]));

*(p+0),还是a,是错误的;

---------------------------------------------
printf("%d\n", strlen(&p));

是随机值;

----------------------------------------------
printf("%d\n", strlen(&p+1));

也是随机值;

---------------------------------------------------
printf("%d\n", strlen(&p[0]+1));

从b开始找,所以是4字节;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置主从复制时发生报错Could not find first log file name in binary log index file‘;解决方案

如图所示,slave_io_runnind:no,slave_sql_running:yes 此时,主从配置错误,我们可以查看Last_IO_Error:来查看报错信息 此时,我们需要停止从服务器的主从服务, mysql> stop slave; Query OK, 0 rows affected, 1 w…

k8s-heml管理 17

Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的 yum。Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。 对于应用…

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知(Compressed Sensing,CS)是一种用于信号处理的技术,旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性,即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

LabVIEW多场景微振动测试平台与教学应用

LabVIEW多场景微振动测试平台与教学应用 在多种工程实践中,微振动的测试与分析对于评估结构的稳定性及其对环境的影响至关重要。针对这一需求,开发了一套基于NI-cDAQ和LabVIEW的多场景微振动测试平台,提高微振动测试的精确度与灵活性&#x…

Python和Jupyter简介

在本notebook中,你将: 1、学习如何使用一个Jupyter notebook 2、快速学习Python语法和科学库 3、学习一些IPython特性,我们将在之后教程中使用。 这是什么? 这是只为你运行在一个个人"容器"中的一个Jupyter noteboo…

vivado FSM Components

Vivado合成功能 •同步有限状态机(FSM)组件的特定推理能力。 •内置FSM编码策略,以适应您的优化目标。 •FSM提取默认启用。 •使用-fsm_extraction off可禁用fsm提取。 FSM描述 Vivado综合支持Moore和Mealy中的有限状态机(…

C语言特殊函数

静态函数 背景知识:普通函数都是跨文件可见的,即在文件 a.c 中定义的函数可以在 b.c 中使用。 静态函数:只能在定义的文件内可见的函数,称为静态函数。 语法 staitc void f(void) // 在函数头前面增加关键字 static &#xff…

读取7400MB/s!华为发布eKitStor Xtreme M.2闪存条

今日,华为举行数据存储新春新品发布会,不仅发布全新数据湖解决方案,华为还针对商业市场与分销市场发布了全闪存存储新品。 据介绍,面向游戏加速、影视编辑、户外作业等场景,华为发布eKitStor Xtreme系列高性能M.2闪存条…

常用的函数式接口(Supplier、Consumer、Predicate、Function)

目录 一.函数式接口作为方法的参数 二.函数式接口作为方法的返回值 三.常用的函数式接口 3.1生产型Supplier接口 3.2消费型Consumer接口 抽象方法:accept 默认方法:andThen 3.3判断型Predicate接口 抽象方法:test 默认方法&#xf…

力扣基础刷题---二分查找

704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 中心思想:找到中间值,跟中间值比…

2024.2.23

1、消息队列代码 msgsnd.c #include<myhead.h> //定义一个消息类型 struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文 };//定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int …

Docker容器故障排查与解决方案

Docker是一种相对使用较简单的容器&#xff0c;我们可以通过以下几种方式获取信息&#xff1a; 1、通过docker run执行命令&#xff0c;或许返回信息 2、通过docker logs 去获取日志&#xff0c;做有针对性的筛选 3、通过systemctl status docker查看docker服务状态 4、通过…

数据安全治理实践路线(上)

基于以上数据安全治理实践理念&#xff0c;可以按照自顶向下和自底向上相结合的思路推进实践过程。一方面&#xff0c;组织自顶向下,以数据安全战略规划为指导,以规划、建设、运营、优化为主线&#xff0c;围绕构建数据安全治理体系这一核心&#xff0c;从组织架构、制度流程、…

“从根到叶:深入理解排序数据结构“

一.排序的概念及引用 1.1排序的概念 排序是指将一组数据按照一定的规则重新排列的过程。排序的目的是为了使数据具有有序性&#xff0c;便于查找、插入、删除等操作&#xff0c;提高数据的组织和管理效率。 稳定性是指如果序列中存在相等元素&#xff0c;在排序完成后&#…

网卡本质,网络发展(局域网,广域网概念)

目录 引入 网卡的本质 网络的发展 引入 早期 局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 注意 引入 前面我们已经学习了很多关于linux系统的知识,其中文件系统和线程尤为繁杂 而网络其实也算系统的一部…

2024年开发者的最好选择!!没有之一

中国银河证券1月23日明确指出&#xff1a;鸿蒙应用将在2024年迎来爆发。 2024年Q2推出开发者Beta版&#xff0c;2024年Q4推出商用版。今年年终将有 5000 款应用完成原生鸿蒙开发&#xff0c;未来支持 50 万款应用。覆盖便捷生活、出行文旅、金融便利、社交资讯、生产力工具、影…

2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024)

2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024) 会议简介 能源动力、机械自动化和航空航天技术国际学术会议&#xff08;ICEPMAT2024&#xff09;将于2024年在北京举行。会议将探讨能源动力、机械自动化、航空航天技术领域的新研究热点、核心技术和发展趋…

【Git】:远程仓库操作

远程仓库操作 一.理解版本控制系统二.远程仓库1.克隆2.Push操作3.fetch操作4. .gitnore文件 一.理解版本控制系统 我们⽬前所说的所有内容&#xff08;⼯作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的笔记本或者计…

Camtasia Studio2024破解版屏幕录像和视频编辑软件

Camtasia Studio是一款专业的屏幕录像和视频编辑软件&#xff0c;它可以用来进行多种工作&#xff1a; 屏幕录制&#xff1a;Camtasia Studio可以录制电脑屏幕上的任何活动&#xff0c;如软件操作、演示、游戏过程等&#xff0c;非常适合制作教学视频、软件教程、游戏解说等。…

京东前端笔试(附答案解答)

引言 我目前本科大四&#xff0c;正在春招找前端&#xff0c;有大厂内推的友友可以聊一聊&#xff0c;球球给孩子的机会吧。 我整理了一份10w字的前端技术文档&#xff1a;https://qx8wba2yxsl.feishu.cn/docx/Vb5Zdq7CGoPAsZxMLztc53E1n0k?fromfrom_copylink &#xff0c;对…