c语言之字符串的集合存放形式

news2024/9/20 2:48:11

采用指针分配的二维数组与直接定义的二维数组,sizeof的不同

采用指针分配的二维数组:

 它的遍历方式是:

上面这个是分配二级指针的地址,二级指针就是一片可以用来分配一级指针空间的地址,然后指针寻址本来就可以当成数组进行处理

这个是对triangle分配了一个一级指针的地址,而一级指针就是一个一维数组,是来存放具体相应数据类型的东西,比如int类型,比如double类型等等

因此这里采用指针的方式来做一个二维数组,我们需要先定义一个二级指针,然后再来定义一级指针,另外需要需要注意的地方就是,二级指针必须分配相应的内存空间,也就是malloc出来相应的类型空间。

这片空间分配多大没有关系,只要是一个二级指针,后面就可以来分配一级指针的空间。

重点:

       1. 用指针做的二维数组来讲,它的sizeof是一个指针大小,一般来讲是8个字节

        2.而用传统方式来做一个二维数组,sizeof出来是整个数组的字节大小,如果sizeof出来的是一个列数组,那么就是整列的字节大小

下面是针对某些情况的特例分析:

        1.一个一级指针要当成数组处理,比如说赋值啥的,就必须给这个一级指针malloc相应大小的内存空间

说一些可能会造成错误的情况:

        1.当一级指针当成数组处理,你没有分配足够的空间或者没有对这个变量进行初始化的时候,都有可能会分配成功或者赋值成功,但是它会造成一些潜在的问题,所以这里强烈建议就是:如果我们要用一级指针来当成数组赋值,必须给这个一级指针分配到足够大的空间。同样这个对于二级指针赋值同样适用

遍历方式 

目前来讲没有更加灵活的遍历方式,采用下面的方式进行遍历

这种方式是打印相对规则的二维数组有效,不规则的二维数组采用for循环的还是打印不出来的。

因为sizeof算不出来行数也算不出来列数,它能sizeof出来的就只有指针的大小,一般指针就是8个字节,你malloc这片空间不管多大都是8个字节的大小。

上面只是我们定义二维数组的一个特例,一般来讲定义一个二维数组要符合规范,每一行要有相同的数据分布

比如这样像如下这样定义

当我们需要存储很多字符串的时候,优先考虑采用什么样的方式存储

采用二级指针的方式存储还是采用二维数组的方式存储

strcpy与直接赋值字符串的使用场景

一般数组只能在初始化的时候进行字符串的赋值 ,下面这种场景都是会报错的

上面基本上都会提示赋值不兼容

根本原因就是:

    不能改变数组指向的内存位置,还有一点需要注意的是也不能使用赋值运算符为整个数组重新分配新的值 

正确的初始化字符串的方法是:

  

他们的赋值原理是:

        他们并不是改变了数组的内存指向,而是把常量区的字符串内容给赋值过来放到数组指向的空间里面。“这样的定义的字符串内容是放到常量区的不会不知道吧”,而这种字符串赋值操作只会是存在第一次初始化数组的时候

那么这个时候问题来了,没有在第一次初始化的时候赋值字符串,那么又该如何操作呢?

这个时候strcpy就上场了,它的核心就是把常量区的字符串内容赋值到数值里面。

所以,如果没有第一次初始化字符串给数组,我们可以操作

注意引入头文件<string.h>,因为strcpy是包含在里面的。

所以当我们需要存储很多字符串在一个盒子里面的时候,我们可以采用字符数组形式存放。

但是我们必须区分另外一种情况,就是下面这种情况的赋值原理

上面说到用字符串初始化一个数组的时候,会把常量区的内容给拷贝过去,那么这个的赋值原理一样吗?答案是:不一样

这个的赋值原理是直接指向了常量区的空间,然后我们可以把指针当成数组处理,然后进行赋值与查找值

两者对比

利用指针来存放其实没有太多的空间限制,你可以存一个很大的字符串,它在大多数的时候都是不会出错的。

但是采用二维数组来存放,就会有严格的数组空间限制,你超出了一个数组字符串的存放空间,就会出现乱码,比如下面

只能存五个当时你超了。

所以综合分析一下就是:在你对数据长度没有严格要求的时候,我们可以采用字符指针来存数据。但是如果你对数据长度有严格要求的情况下,我们就用二维数组来存放字符串

好了,祝大家早安午安晚安。 

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

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

相关文章

Mac多媒体播放器 Movist Pro v2.11.4中文激活版下载

Movist Pro for Mac是一款专业的媒体播放器&#xff0c;特别为Mac用户设计。它不仅界面简洁美观&#xff0c;而且功能强大&#xff0c;能满足用户各种播放需求。 Movist Pro v2.11.4中文激活版下载 首先&#xff0c;Movist Pro for Mac支持多种媒体文件的播放&#xff0c;包括视…

Ubuntu系统安装Anaconda

1. 下载Anconda安装包 1.1 wget命令下载 当然还可以去清华大学开源软件镜像站&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror&#xff0c;下载各种版本的Anaconda。 wget下载命令如下&#xff1a; 我这里下载的是2024.02…

【IDEA】在IntelliJ IDEA中导入Eclipse项目:详细指南

IntelliJ IDEA和Eclipse是两款常用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在软件开发中经常会遇到需要在它们之间迁移项目的情况。本文将重点介绍如何在IntelliJ IDEA中导入Eclipse项目&#xff0c;以帮助开发者顺利地迁移他们的项目&#xff0c;并在IntelliJ …

计算机组成原理【CO】Ch7 I/O大题

目录 I/O大题解题方法 I/O接口 各种I/O方式的特点 I/O端口编址 程序查询方式 中断控制方式 DMA控制方式 程序中断的工作流程 程序中断的工作流程 DMA方式和中断方式的区别 I/O大题解题方法 CPU 程序查询中断DMA I/O接口的类型 按字传输&#xff1a;每次传输一个字 程…

OpenCV基本图像处理操作(十)——图像特征harris角点

角点 角点是图像中的一个特征点&#xff0c;指的是两条边缘交叉的点&#xff0c;这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中&#xff0c;角点是重要的特征&#xff0c;因为它们通常是图像中信息丰富的区域&#xff0c;可以用于图像分析、对象识别、3D…

小而强,大不同:小模型SLM在人工智能时代的影响

小模型的优势越来越明显了 在人工智能领域的竞赛中&#xff0c;小型语言模型&#xff08;SLM&#xff09;正在崛起&#xff0c;挑战传统观念。虽然大型语言模型&#xff08;LLM&#xff09;曾占据主导地位&#xff0c;但SLM凭借其小巧、高效和适应性强的优势&#xff0c;正在推…

【php开发工程师系统性教学】——Laravel框架(验证码)的配置和使用的保姆式教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

决策树分类任务实战(python 代码详解)

目录 一、导入库、数据集、并划分训练集和测试集 二、参数调优 (一)第一种调参方法&#xff1a;for循环 (1)单参数优化 ①单参数优化(无K折交叉验证) ②单参数K折交叉验证 优化 (2)多参数优化 ①多参数优化(无K折交叉验证) 参数介绍&#xff1a; ②多参数K折交叉验证…

博客网站/部署服务器---继上篇前端页面接入后端

目录 准备工作 创建用户类博客类与连接数据库 创建博客类 创建用户类 创建连接数据库工具类 实现对数据库数据博客的操作 实现对数据库用户的操作 创建数据库语句 登录页面 前端 后端 博客列表 前端 注销登录 写入数据 判断用户是否登录 替换页面用户昵称 后…

C语言中的控制语句(循环语句while、for)

循环语句 什么是循环 重复执行代码 为什么需要循环循环的实现方式 whiledo...whilefor while语句 语法格式&#xff1a; while (条件) {循环体…… } 需求&#xff1a;跑步5圈 示例代码&#xff1a; #include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的…

C语言 逻辑运算符

本文 我们来说 逻辑运算符 有时做出决策需要测试多个条件&#xff0c;C语言提供了用于将简单条件组合成复杂条件的逻辑运算符。 逻辑运算符 如下图 用逻辑运算符连接操作数组成的表达式称为逻辑表达式。 逻辑运算的结果只有0和1 逻辑运算的对象可以是任意数值型&#xff0c;但…

Axure RP 9中文激活版:专业原型设计工具mac/win

Axure RP 9是一款由美国Axure Software Solution公司开发的专业原型设计工具。它凭借强大的交互功能和丰富的设计素材&#xff0c;为产品经理、UI设计师、交互设计师等用户提供了高效、便捷的原型设计体验。 Axure RP 9支持快速创建线框图、流程图、原型和规格说明文档&#xf…

过零可控硅光耦与随机可控硅光耦

无过零检测 推荐型号 MOC3021无过零检测 对应的数据手册 原理框图 工作电流 过零检测 推荐型号 MOC3061 原理框图 工作电流 注意事项 随机导通型是随时打开的。都是过零时关闭 也即是说&#xff1a;过零型打开的都是一个馒头波。 参考链接 过零可控硅光耦怎么用-电路知识干…

大屏-flex布局

<div class"container"><div class"title">标题</div><div class"content"><div class"item"></div><div class"item" style"width: calc((100% - 30) / 3 * 2)"><…

Vue报错 Cannot read properties of undefined (reading ‘websiteDomains‘) 解决办法

浏览器控制台如下报错&#xff1a; Unchecked runtime.lastError: The message port closed before a response was received. Uncaught (in promise) TypeError: Cannot read properties of undefined (reading websiteDomains) at xl-content.js:1:100558 此问题困扰了…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

深度学习--CNN卷积神经网络(附图)

框架 让我们先看一下CNN的框架 卷积层中后是ReLu激活函数 &#xff0c;然后是深化池&#xff0c;之后是全连接&#xff0c;最后进行Softmax进行归一化。 所以&#xff0c;我们先逐一了解一下它们各个部分 全连接层 全连接层也称感知机&#xff0c;BP神经网络 全连接层&…

20240330-2-XGBoost面试题

XGBoost面试题 1. RF和GBDT的区别 相同点&#xff1a; 都是由多棵树组成&#xff0c;最终的结果都是由多棵树一起决定。 不同点&#xff1a; 集成学习&#xff1a; R F RF RF属于 B a g g i n g Bagging Bagging思想&#xff0c;而 G B D T GBDT GBDT是 B o o s t i n g Bo…

节点加密技术:保障数据传输安全的新利器

随着信息技术的快速发展&#xff0c;网络数据的安全传输问题日益凸显。节点加密技术作为一种新兴的加密手段&#xff0c;正逐渐成为保障数据传输安全的重要工具。本文将探讨节点加密技术的原理、应用及其优势&#xff0c;并分析其未来的发展趋势。 节点加密技术的原理 节点加密…

EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网络多头注意力多变量时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网络多头注意力多变量时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网络多头注意力多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matl…