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

news2024/12/22 19:02:36

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.coloradmin.cn/o/1461127.html

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

相关文章

微信小程序 ---- 慕尚花坊 项目初始化

目录 项目介绍 01. 项目概述 02. 项目演示 03. 项目技术栈 04. 接口文档 申请开发权限 项目初始化 01. 创建项目与项目初始化 02. 自定义构建 npm 集成Sass 03. 集成项目页面文件 04. VsCode 开发小程序项目 项目介绍 01. 项目概述 [慕尚花坊] 是一款 同城鲜花订购…

JAVA设计模式结构型模式

一、前言 java设计模式主要分为创建型模式,结构型模式和行为型模式。上一篇主要总结了行为型设计模式,本章总结,结构型模式。像创建型模式就不写了,比较简单。大概知道是工厂模式和建造者模式,原型模式就行&#xff0…

相机图像质量研究(39)常见问题总结:编解码对成像的影响--运动模糊

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

新火种AI|估值180亿!月之暗面成为AI领域又一独角兽...

作者:小岩 编辑:彩云 2月20日,AI领域内的初创企业月之暗面完成了全新一轮的融资,金额超过10亿美元,一举刷新国内AI领域最大单笔融资记录。据悉,为月之暗面进行投资的资本方众多,包括红杉中国&…

vue保留用户在列表的操作记录, beforeRouteLeave离开当前组件缓存数据即可

最近遇到一个需求,用户在列表页的查询输入框输入条件后,点击查询,然后此时切换菜单,再回到之前的页面,希望能停留在上一次输入的结果上,如下例子,用户管理页面,输入yangfan这个关键词搜索后,结果如下图: 当我此时点击权限管理后,再点击用户管理切回来,结果依旧如上…

【论文阅读|基于 YOLO 的红外小目标检测的逆向范例】

基于 YOLO 的红外小目标检测的逆向范例 摘要1 引言2 相关工作2.1 逆向推理2.2 物体检测方法 3 方法3.1 总体架构3.2 逆向标准的可微分积分 4 实验4.1 数据集和指标4.2 实验环境4.4 OL-NFA 为少样本环境带来稳健性 5 结论 论文题目: A Contrario Paradigm for YOLO-b…

2024年2月中国数据库排行榜:PolarDB夺魁首登顶,TiDB攀升回探花

银装素裹覆大地,春意初醒待来临。2024年2月墨天轮中国数据库流行度榜单出炉,表现最亮眼的无疑是PolarDB,其自23年7月以来一路高歌猛进,此次更是一举夺魁,彰显了云原生数据库的蓬勃发展态势,OceanBase、TiDB…

笔试题详解(C语言进阶)

前言 欢迎阅读本篇文章!本篇文章通过一个笔试题来加强我们对C语言的理解,希望对你有帮助。后续我会写一个栏目,集合我见到的C语言题目,进行分析讲解。 1、题目一 判断下面程序的输出结果:(下面说的地址4/8字节是因为对…

使用Outlook邮箱保护您的隐私

在数字时代,我们的电子邮件地址就像是我们的数字身份证,它连接着我们的个人信息和网络世界。无论是注册新服务、购物还是预订餐桌,电子邮件地址都是我们身份的关键部分。然而,这也使我们容易受到垃圾邮件和隐私泄露的影响。但是&a…

基于ImageSharp实现趣味横生的点选验证

引言 随着安全需求的不断提升,传统的文本验证码已经无法满足防止机器自动识别和攻击的要求。点选式验证码作为一种交互式的验证手段,因其更难被自动化脚本破解而逐渐受到欢迎。利用开源图像处理库SixLabors.ImageSharp来实现点选式验证码功能。 ImageS…

将从excel 文件里获取的时间转换成标准时间

new Date(new Date(1900, 0, data.PostingDate).setDate(new Date(1900, 0, data.PostingDate).getDate()-1))

IDA按F5反汇编伪代码错误Please use ida (not ida64) to decompile the current file

IDA不能F5反汇编成为伪代码,提示Warning Please use ida (not ida64) to decompile the current file 不给我转伪代码,不让我用ida64,哪我就用ida32 换32位IDA果然可以了 又可以愉快的玩耍了

2024年1月京东平板电视行业分析:TOP10品牌销量及销额排行榜

鲸参谋监测的京东平台1月份平板电视市场销售数据已出炉! 根据鲸参谋电商数据分析平台显示,今年1月份,京东平台上平板电视的销量将近120万件,环比上个月增长约70%,同比去年下滑43%;销售额约34亿元&#xff…

指针的进阶(C语言)(上)

目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2 数组名VS&数组名 3.3数组指针的运用 前言 对于指针,我们已经有了初步认识(可以看我写的指针详解那一篇文章)。 简单总结一下基本概念: 1、指针就…

C# Winfrom实例:武汉智能安检闸机数据接收和解析

项目介绍:本实例主要是接收安检闸机的数据解析并显示到界面上,只做功能实现,不做界面美化 硬件:闸机一个、网线一根、电脑主机开发环境:vs2017 系统:win10涵盖知识点:tcp通讯、文件写入、多线程…

通过Linux终端搭建基于HTTP隧道的文件传输系统

嘿,Linux小侠们,准备好挑战一项酷炫的任务了吗?今天我们要一起通过Linux终端搭建一个基于HTTP隧道的文件传输系统,让我们的文件在网络的海洋中畅游无阻! 在开始之前,让我们先来想象一下这个场景&#xff1…

吃个桃桃~

解法&#xff1a;暴力、排序 #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; #define endl \n struct tree {int index;int peach; }; bool cmp(tree a,tree b) {if (a.peach ! b.peach)return …

提升数据库操作技能:发现MyBatis-Plus学习网站的无限可能!

介绍&#xff1a;MyBatis-Plus是一个对MyBatis框架进行增强的工具&#xff0c;旨在简化开发流程并提升开发效率。以下是MyBatis-Plus的一些主要特点&#xff1a; CRUD操作简化&#xff1a;MyBatis-Plus提供了一些列的CRUD操作方法&#xff0c;这些方法已经封装好&#xff0c;可…

计算机服务器中了devos勒索病毒怎么办?Devos勒索病毒解密数据恢复

网络技术的不断发展与更新&#xff0c;为企业的生产运营提供了有利保障&#xff0c;企业的生产运营离不开数据支撑&#xff0c;通过企业数据可以综合调整发展运营方向&#xff0c;但网络是一把双刃剑&#xff0c;近期&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0…

文件系统创建分区

目录 一、EXT4文件系统创建分区 1.使用 fdisk 分区 2.格式化写入文件系统 3.挂载 临时挂载 永久挂载 二、XFS文件系统创建分区 1.使用 gdisk 分区 2.格式化写入文件系统 3.挂载 临时挂载 永久挂载 三、创建swap分区 1.查看文件系统 2.新建swap分区 3.格式化分区 …