C++指针与其它复合类型

这篇具有很好参考价值的文章主要介绍了C++指针与其它复合类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

1.指针与字符串

1.1cout接收char类型的地址的反应

1.2字符串字面值

1.3字符串备份

2.使用new创建动态结构

3.使用new和delete搭配存储键盘输入的字符串


前言:

  指针我们已经知道如何使用了,也知道指针和数组配合起来使用,这次我们来讲讲指针与字符串,以及指针和动态结构的一些知识。

1.指针与字符串

1.1cout接收char类型的地址的反应

C++指针与其它复合类型

  我们知道字符数组的数组名是首字符的地址,当我们用cout工具来显示字符数组里的字符串的时候,无疑是把首地址传给cout了。cout将顺着这个地址依次往下打印,当它遇到字符串的结束标志时,就停下来不打印了。

  所以我们就知道,cout在打印字符串的时候,接收的是一个字符的地址,并认为我们是要它打印一个字符串,为了与cout对字符串输出的处理保持一致,引号括起来的字符串也应当是一个地址

1.2字符串字面值

C++指针与其它复合类型  双引号括起来的字符串是常量字符串,是一个不能被修改的值,一般出现在用字符指针来接收常量字符串的首字符地址但我们知道,字符串还可以给字符数组初始化,但内容可以被修改,大家注意区分

  对bird指针进行const修饰,使得代码更加健壮,当发现错误时,主动抛出错误

  对指向常量字符串的字符指针进行输入是错误的:

  1. 有些编译器将字符串字面值视为只读常量,如果修改了它们,编译器将会报错。在C++中,字符串字面值都被视为常量,而有一些编译器并没有改过来,仍可以对其进行修改。
  2. 有些编译器只使用一个字符串字面值副本来为程序使用。

  补充:C++不能保证字符串字面值被唯一得存储

1.3字符串备份

  C++指针与其它复合类型

  怎么将一个字符串给存起来呢?首先我们可以想到用数组,但这个数组如果是静态的话缺点很多,所以我们考虑用new创建一个动态数组,将其地址返回个一个字符指针管理更好

  在C++中strlen、strcpy的头文件是<cstring>,使用方法和C语言里的一样。

  这里还需要首的一点就是在开辟动态数组时,元素个数的确定+1的问题。因为我们计算字符串长度的时候,空字符是不算内容的,但表示一个字符串,结尾必须有空字符,我们加上这个单位空间,就是给空字符留的

2.使用new创建动态结构

C++指针与其它复合类型 创建动态结构和前面的都很相似,我注释里说明清楚啦,这里就不再赘述啦。

C++指针与其它复合类型

  关于为动态结构成员赋值,我们需要使用cin和cin.get()工具分别为变量和字符数组赋值,这一点很重要。可不敢直接像C一样p->name = "张三";如果不是很懂cin.get()请跳转:

链接:《认识C++字符串符合类型》

  而如何访问到结构成员呢?首先p是一个指向结构体的指针,指针通过箭头操作符可以轻松访问到结构体成员这里读者可能也很好奇,为啥没有结构名称的结构体可以通过(*p).成员名来访问博主经过一番学习,总结经验,认为是因为内存单元是唯一性的原因我们知道,两个没有名称的结构体,即使成员一模一样,在声明类型的时候创建出来的变量也会被认为是不同类型的结构体变量。这正是因为两个变量的存储地址不同呀。虽然有名称的结构体创建的变量也不在同一个存储位置上,但它们是由相同名称创建出来的。说这个原因是,因为计算机在对没有名称的结构体进行操作时,可以用(*指针).结构体成员,是因为,类型是独立的,计算机认得这块空间里放得是什么东西。

3.使用new和delete搭配存储键盘输入的字符串

C++指针与其它复合类型  当我们想将输入的字符串内容放到一个开辟在堆区的数组中,可以使用new来实现。

  可能读者不太理解这么做的意义在哪,博主解释一下。我们在以往输入一个字符串到一个动态数组的时候,是不是事前还要确定动态数组要开辟多大的空间,我们需要决定元素个数。但在这里,我们先是用了一个较大的静态数组接收我们输入的字符串(保证接收的下),然后用字符串备份的方式,开辟一个合理的数组大小,并将其地址返回去。而getname()函数内部的局部变量pn和数组都销毁掉了,没有浪费空间。

  最后的结果就相当于将键盘输入的字符串放到一个大小恰好不过的数组里面去了

  好啦,今天的指针内容就到这告一段落啦。后面还有一些细碎的指针知识,我们以后遇到就写出来,进入下一篇章。

  希望读者读完有所收获,如果文章有误的地方,请读者留言至评论区下方,博主看到及时更改。

  求点赞,求点赞,求点赞!文章来源地址https://www.toymoban.com/news/detail-423445.html

到了这里,关于C++指针与其它复合类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++中求string类型字符串长度的三种方法

    length()函数是string的内置成员方,用于返回string类型字符串的实际长度。 length()函数声明: // 返回 string 长度,单位字节 size_t length() const noexcept; 示例1: size()函数与length()一样,没有本质区别。string类刚开始只有length()函数,延续了C语言的风格。引入STL之后,为了兼容又加入

    2024年02月07日
    浏览(54)
  • Python----统计字符串中的英文字母、空格、数字和其它字符的个数。

    1、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 方法一:使用正则表达式  方式二:  方式三:使用列表[]

    2024年02月06日
    浏览(42)
  • 汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。

    前置知识:汇编语言常用系统功能调用(如果懂直接跳过看题目详解) 格式: 功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。 格式: 功能:将DL寄存器中的字符送显示器显示,如果DL中为〈CTRL〉+〈BREAK〉的ASCII码,则退出。 格式: 功能:将DL寄存器中的字

    2024年02月03日
    浏览(33)
  • 【C语言_题库】C语言:编写一个程序,输入一组字符串,将字符串中的小写字母转换为大写字母,其它字符不变,并输出。

    【问题描述】 从键盘输入一行英文字符串,把所有小写字母变成大写字母,其他字母和字符保持不变。 【输入形式】 输入一行字符串,含大小写。 【输出形式】 输出大写字母形式。 【样例输入①】 hello,world. 【样例输出①】 result:HELLO,WORLD. 【样例输入②】 hello,China. 【样例

    2024年02月07日
    浏览(47)
  • C和指针(六)字符串、字符、字节

    字符串 1,C没有显式的字符串类型,以字符串常量形式出现,存储于字符数组中。 2,C字符串是一串以NUL字节结尾的字符。 1)字符内部不能出现NUL字节。 2)NUL字节是字符串的终止符,不是字符串的一部分,所以字符串长度不包括NUL字节。 3,头文件string.h包含了使用字符串

    2024年02月10日
    浏览(32)
  • C语言指针操作(七)通过指针引用字符串

    通过指针引用字符串详解,以及字符指针变量和字符数组的比较、 在平常的案例中已大量地使用了字符串,如在 printf函数中输出一个字符串。这些字符串都是以直接形式 (字面形式) 给出的,在一对双引号中包含若干个合法的字符。在本节中将介绍使用字符串的更加灵活方便

    2024年02月03日
    浏览(44)
  • 《C和指针》读书笔记(第九章 字符串、字符和字节)

    在C语言中,字符串和数组有很多相似之处,且官方提供了很多的库函数可供调用。那么字符串和数组这对姐妹花,究竟有着什么样的亲密关系,而作为我们本期的重点角色,字符串又有何独特之处呢? C语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现

    2024年02月08日
    浏览(35)
  • 【力扣】344. 反转字符串 <首尾指针>

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入 :s = [“h”,“e”,“l”,“l”,“o”] 输出 :[“o”,“l”,“l”,“e”

    2024年02月13日
    浏览(31)
  • 使用命令替换目录下字符串

    在这里插入代码片 举个例子: sed -i “s/手机/恭喜发财/g” grep 手机 -rl res 这条命令使用了 sed 命令和 grep 命令来搜索并替换文件中的文本。 grep 手机 -rl res :在目录 res 及其子目录中递归搜索包含\\\"手机\\\"的文件,并返回匹配的文件名列表。 sed -i \\\"s/手机/恭喜发财/g\\\" :对

    2024年02月10日
    浏览(29)
  • 《热题100》字符串、双指针、贪心算法篇

    思路:对于输入的的字符串,只有三种可能,ipv4,ipv6,和neither ipv4:四位,十进制,无前导0,小于256 ipv6:八位,十六进制,无多余0(00情况不允许),不为空 class Solution:     def solve(self , IP: str) - str:         if \\\'.\\\' in  IP: #有可能是IPV4             res = IP.split(\\\'.\\\')            

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包