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

采用指针分配的二维数组与直接定义的二维数组,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.hqwc.cn/news/636591.html

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

相关文章

K8s 部署 MySQL 8.0.20 主从复制结构

一、K8s 部署 MySQL 安装规划 组件replicas类型mysql-master1StatefulSetmysql-slave1StatefulSet 使用 k8s 版本为&#xff1a;v1.18.0 。 本次使用 OpenEBS 来作为存储引擎&#xff0c;OpenEBS 是一个开源的、可扩展的存储平台&#xff0c;它提供了一种简单的方式来创建和…

老阳闲聊|怎么在Temu电商平台上赚钱?

随着互联网技术的飞速发展&#xff0c;电商平台如雨后春笋般涌现&#xff0c;其中Temu电商平台以其独特的商业模式和广阔的市场前景&#xff0c;吸引了众多创业者和商家的目光。那么&#xff0c;如何在Temu电商平台上赚钱呢?本文将为您详细解析。 首先&#xff0c;了解Temu电商…

(2022级)成都工业学院数据库原理及应用实验七: 数据库安全

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 1、创建数据库hospital,在hospital数据库中创建科室表De…

【C++】日期类Date(详解)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 日期类 日期类实现地图 获取某年某月的天数&#xff1a;GetMonthDay 检查日期合法&#xff0c;构造函数&#xff0c;拷贝构造函数&#xff0c;赋值运算符重载及析构函数…

21.组件组成

组件组成 组件最大的优势就是可复用性 当使用构建步骤时&#xff0c;我们一般会将 Vue 组件定义在一个单独的 .vue 文件中&#xff0c;这被叫做单文件组件(简称 SFC) 组件组成结构 <template><div>承载标签</div> </template> <script> expor…

【Java并发知识总结 | 第七篇】Java并发相关概念总结(程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性)

文章目录 7.并发相关概念总结&#xff08;程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性&#xff09;7.1程序、进程与线程7.2并行和并发7.3同步和异步7.4什么是死锁&#xff1f;如何避免&#xff1f;7.5何为线程安全&#xff1f;以及三大特性 7.并发相关…

SQL 语言数据操纵语言 DML

一、目的 SQL 语言的数据操纵功能通过 DML(数据维护语言)实现。DML 包括数据查 询和数据更新两种数据操纵语句。其中&#xff0c;数据查询指对数据库中的数据查询、统 计、分组、排序等操作&#xff1b;数据更新指数据的插入、更新和删除等数据维护操 作。 本次实验了解 D…

2023年图灵奖颁给普林斯顿数学教授 Avi Wigderson

2023年图灵奖揭晓&#xff0c;你怎么看&#xff1f; 什么是图灵奖 图灵奖&#xff08;Turing Award&#xff09;&#xff0c;全称A.M.图灵奖&#xff08;ACM A.M Turing Award&#xff09;&#xff0c;是由美国计算机协会&#xff08;ACM&#xff09;于1966年设立的计算机奖项…

谷歌Gemini 1.5 Pro国内怎么用?国内镜像来了

长期以来&#xff0c;许多人向我咨询是否存在一个稳定而高效的全球AI大模型测试平台&#xff0c;这个平台需要不仅真实可靠&#xff0c;而且能够提供稳定和快速的服务&#xff0c;不会频繁出现故障或响应缓慢的问题。然而&#xff0c;当我发现了AskManyAI时&#xff0c;我被其所…

2024年适用于 Android 的最佳免费数据恢复应用程序

无论是系统崩溃、软件升级、病毒攻击还是任何其他故障&#xff0c;这些软件问题都可能导致手机上的数据丢失。可以使用免费的数据恢复应用程序修复数据故障并检索丢失或删除的文件。 数据恢复应用程序旨在从另一个存储设备中检索丢失或无法访问的数据。这些工具扫描 UFS 并尝试…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏&#xff0c;据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后&#xff0c;在1975年传入美国&#xff0c;1976年leslieH.Autl博士甚至还出版了一本名为The…

[阅读笔记21][RA-CM3]Retrieval-Augmented Multimodal Language Modeling

这篇论文是meta联合斯坦福在23年4月发表的论文&#xff0c;提出了一个使用外部知识检索增强的多模态模型。 这篇模型提出的RA-CM3模型是第一个能够检索并生成图像文本的多模态模型&#xff0c;在图像文本生成任务上优于现有的多模态模型&#xff0c;同时使用更少的训练量。 RA-…