C语言中 char str[] 与 char *str 的关系

2023-10-27

首先,我们得明确,在C语言中,没有真正的字符串类型。

所以,就诞生了 字符串数组 这么个类型。

于是,当我们想申明一个字符串变量时,大体上有下面两种方法:

char str[] = "hello";
char *p = "hello";

str[]:它定义的是一个字符串数组变量。可以通过 str[0] = "w" 修改值。

*p:它定义的是一个指针变量。不能通过 *(p+0) = "w" 修改值。

为什么这两种写法都可以呢?这就和C语言中字符串本质有关了。

C语言中字符串本质 是返回一个首个字符地址

也就是说 str 代表 "h" 的地址,p 也存储着 “h" 的地址。

sizeof()打印的区别

下面,我们再来看看对 str 和 p 取 sizeof() 会有什么惊喜:

很明显,可以看到两个打印值不一样,我们来分析一下为什么是这个值。

sizeof(str) -> 6:char 类型是 1 个字节 ==》存在 "hello" 5个字符 + “\0" 1个结束符 = 6个字符 ==》所以 sizeof(str) 为 6。也就是说字符串数组变量所占内存的大小 与存储值的类型和存储数量有关

sizeof(p) -> 8:p 是一个存储地址的变量,前面的 char 是说明存储的这个地址对应的值的类型,和 p 的类型没关系。而 存储地址的大小和平台位数有关,我是64位电脑,所以打出来的是 8。

strlen()

可以看到都是5,因为 strlen() 的判断标准是 结束符 ‘\0',结束符是一样的,strlen()结果当然是一样的。

关于是否预留 结束符位 的总结:当你的 char 是用来装数据(如sm2密钥)时,数据是多长你就分配多长即可。当你的 char 是用来装字符串时,得多预留一个位置装结束符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中 char str[] 与 char *str 的关系 的相关文章

  • 51单片机“独立按键”控制静态数码管———显示数字0-9

    51单片机 独立按键 控制静态数码管学习总结 一 按键功能实现总结 独立按键 电路图解析及接线 二 程序编译与控制静态数码管显示1 2 0 9 的效果展示 三 按键程序逻辑设计与程序编译 四 程序烧录与保存 一 按键功能实现总结 独立按键
  • python 绘制两组数据的分布图

    可以使用 Python 中的 Matplotlib 库来绘制两组数据的分布图 下面是一个简单的示例代码 import matplotlib pyplot as plt 假设有两组数据 分别是 x 和 y x 1 2 3 4 5 y 2 4
  • JAVA用线程池模拟查询大批量数据

    JAVA用线程池模拟查询大批量数据 文章目录 JAVA用线程池模拟查询大批量数据 1 前言背景 1 1 线程 1 2 进程与线程的区别总结 1 3 使用多线程的好处 2 多线程的实现 2 1 操作流程 3 测试 1 前言背景 1 1 线程
  • QListWidget右键菜单

    关于QListWidget右菜单的的实现 网上多数资料都没有提到如何使用Qt Creator快速实现 如参考资料 1 2 本文重点介绍此方法 1 槽函数生成 通过Qt Creator的UI设计器将QListWidget控件拖放到主界面中 然
  • 刷题之77. 组合

    题目 给定两个整数 n 和 k 返回范围 1 n 中所有可能的 k 个数的组合 你可以按 任何顺序 返回答案 示例 1 输入 n 4 k 2 输出 2 4 3 4 2 3 1 2 1 3 1 4 来源 力扣 LeetCode 链接 http
  • Pytorch实现Seq2Seq

    前言 Seq2Seq模型用来处理nlp中序列到序列的问题 是一种常见的Encoder Decoder模型架构 基于RNN同时解决了RNN的一些弊端 输入和输入必须是等长的 Seq2Seq的模型架构可以参考Seq2Seq详解 也可以读论文原文
  • MyBatis中的$和#,你知道他们的区别吗?

    转自 MyBatis中的 和 你知道他们的区别吗 下文笔者将讲述MyBatis中的 和 的区别简介说明 如下所示 在MyBatis的xml配置文件中 我们经常看见 和 后面紧跟变量 那么他们有什么区别呢 下文笔者将一一道来 如下所示 1 是

随机推荐

  • C# 爬虫遇到EventStream数据时该怎么获取值

    声明 本文只作学习研究 禁止用于非法用途 否则后果自负 如有侵权 请告知删除 谢谢 今天调用某个网站的接口时发现数据格式是这种的 第一次遇到 正常的应该是这样的才对 有个 响应 然后响应里面是一些返回过来的数据 而这个就很奇怪 没有 响应
  • 07模板学习之模板类的static数据成员的归属问题

    07模板学习之模板类的static数据成员的归属问题 1 模板类的static数据成员的归属问题分析 从上面的图分析 先看类模板中的static int a 若类模板中声明了static数据 那么该a是属于类模板还是属于具体类呢 假设属于类
  • 菜鸟入门Docker

    菜鸟入门Docker 说明 一 什么是Docker 1 虚拟机和Linux容器 二 Docker用途 三 Docker安装 1 设置仓库 2 安装 Docker Engine Community 3 验证安装成功 四 Docker启动与停止
  • Linux必杀(十八):VI、VIM编辑器

    题记 基本上VI共分为3种模式 分别是一般模式 命令行模式和编辑模式 一 一般模式 以Vi打开一个文件就直接进入一般模式了 在这个模式下 可以使用上下左右按键来移动光标 可以删除字符或删除整行 也可以复制 粘贴文件数据 二 编辑模式 在一般
  • Dubbo中的一些常见问题?

    关于dubbo是用的什么协议 在使用dubbo的时候会配置
  • ubuntu 防火墙基本设置

    查看防火墙状态 ufw status 打开防火墙 sudo ufw enable 重启防火墙 sudo ufw reload 开放指定端口 ufw allow 8080
  • 使用C语言打印不同星号图案(矩形 平行四边形 三角形)

    献给大一或大二的学弟学妹们和在自学 C语言的同志们 打印自定义行数的矩形 打印效果 参考代码 include
  • echarts 图表无数据为空时显示“暂无数据”

    如标题所述 我们希望 echarts 图表在没有数据时显示 暂无相关数据 字样 操作 需要对返回的数据做判断 如果有数据则正常显示图表 如果没有数据 我们将此 div 的内容改为文本 暂无相关数据 并设置样式即可 HTML div div
  • 从感知机到Transformer,一文概述深度学习简史

    关注公众号 发现CV技术之美 本文转自机器之心 作者 Jean de Dieu Nyandwi 机器之心编译 这篇文章从感知机开始 按照时间顺序回顾了深度学习的历史 1958 年 感知机的兴起 1958 年 弗兰克 罗森布拉特发明了感知机
  • Java中的异常

    Java中的异常 1 什么是异常 2 异常的类结构 3 运行时异常的特点 4 编译时异常特点 5 对受检异常进行处理 5 1 try catch 捕获处理 5 2 finally子句处理 5 3 finally子句 5 4 throws抛出
  • java案例之制作系统

    java案例之制作系统 案例 需求 定义一个方法 可以接收中奖号码的数组 用户选号的数组 根据命中红球数和篮球数判断最终的结果并输出 分析 系统需要三部份 第一部分是 生成随机产生的7位数双色球数字 其中前6位是红球 第7位是蓝球 红球范围
  • 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    点击上图中的 加号 图标 新建一个连接 如上图 先输入数据库的账号密码 帐号默认为root 填好密码后 点击 OK 连接就建立好了 建立完成后 会出现一个长方形的框框 双击它 出现下图所示页面 点击图中的红圈里的按钮 新建一个Schema
  • 图的深度优先遍历(递归与非递归算法)和广度优先遍历

    老师的题目 实验内容 已知某地区的公路网以图表示 图中的顶点表示站点 任意两站点间的路段以带权的边构成的邻接矩阵表示 矩阵中非零元表示两个站点间存在直接的路段 否则没有路段 打开E Test文件夹中的exp06 cpp文件 补充编写所需代码
  • html做成小程序,微信小程序——简单静态网页的制作

    一 前言 需要知识 HTML CSS 注意 微信小程序的语法与HTML和CSS不太相同 但本质是一样的 要求 进入开发者工具并且创建一个测试小程序 选择建立快速模板 在pages目录底下新建一个first的文件夹 其中包括指定的四个文件 并
  • react 组件逻辑复用

    组件逻辑复用 React为什么设计成组件化的形式 其实最大的原因就是为了方便复用 然而组件的复用虽然方便 逻辑的复用却很麻烦 因为state的存在 逻辑被锁死在组件内部 很难分离出去 下面以一个可以改变背景色的步进器为例 展示react中常
  • 复制PDF文字时去掉换行符

    问题描述 当我们在pdf上复制文字时 每行总会出现换行符 乱糟糟的 解决方法 注意 windows推荐开源软件cpoy gihub copy 临时使用 推荐网页 文字替换在线处理工具 在快捷指令中新建 快捷服务 选择执行shell脚本 写这
  • 苹果开发者ADP协议第3.2(f)节违反

    相信很多开发者都遇到过 ADP协议第3 2 f 节违反 导致账号被封 遇到这种情况基本没戏 不用再联系苹果了 基本没戏 以下是被封的邮件信息 Hello xxx This letter serves as notice of termina
  • DSP CCS 12.00运用, 产生正弦波的图像 芯片:F28335

    1 首先建立新的项目 工程 2 参数选择 3 设置数据 保证与芯片得连接 4 整理思路 信号频率 1000 HZ 采样频率 20000 HZ 采样点数 128 5 代码 头文件的定义 include stdio h include math
  • vue-aplayer在手机移动端的时候默认没有总时长,点击播放才显示总时长问题

    前言 在移动段使用vue aplayer这款音频播放组件的时候 发现他默认的时候看不到总时长 只有点击播放才能看到 我的数据是从后台直接拿来的 观察官网没有这个问题 既然出现问题就得解决问题 这里分享下我的解决办法 解决办法一 尝试过但是不
  • C语言中 char str[] 与 char *str 的关系

    首先 我们得明确 在C语言中 没有真正的字符串类型 所以 就诞生了 字符串数组 这么个类型 于是 当我们想申明一个字符串变量时 大体上有下面两种方法 char str hello char p hello str 它定义的是一个字符串数组变