【C++ 学习】字符串(指针形式和数组形式)

字符串

字符串基本知识

字符串是以空字符(\0)结尾的char类型数组。如下程序,给出了字符串的声明定义方式。

void test(void) {char words[MAXLENGTH] = "I am a string in an array.";const char* pt1 = "something is pointing me.";puts("Here are some strings.");puts(MSG);puts(words);puts(pt1);words[8] = 'p';puts(words);
}

字符串定义都是使用双引号来进行定义的,单引号定义的是字符,双引号中的字符和编译器自动加入末尾的\0字符。
字符串常量属于静态存储类别,这说明,如果在函数中使用字符串常量,该字符串只会存储一次。

字符串数组形式和指针形式

字符串存储在静态存储区,程序载入内存时,也载入了程序中的字符串,但是,程序在开始运行时,才会为其分配内存。此时,才会将字符串拷贝到数组中。此时字符串有两个副本,一个时静态内存区中的字符串字面量,另一个是存储在数组中的字符串。而指针形式,则会将字符串在静态区的地址拷贝给指针。
在静态存储区的字符串字面量被视为const数据。

void test1(void) {char ar[] = MSG;const char* pr = MSG;printf("address of \"I am a symbolic string constant.\": %p \n", "I am a symbolic string constant.");printf("address of ar: %p \n", ar);printf("address of pr: %p \n", pr);printf("address of MSG: %p \n", MSG);
}

输出:

address of "I am a symbolic string constant.": 00007FF77A209C88
address of ar: 000000FD6DD0F9E8
address of pr: 00007FF77A209C88
address of MSG: 00007FF77A209C88

可以使用指针形式来指向字符串进行使用,但是不要对指针形式字符串进行更改,这可能会引起错误(具体取决于编译器)。

void test2(void) {const char* pr = MSG;while (pr) {printf("%c", *pr);pr++;}printf("\nDone!");
}

可以使用字符串指针形式,在指针方式下,指针可以进行移动,但是,需要把循环条件写好,该方式下的循环条件并是一个合适方式,原因在于指针会一直移动下去(应该也是取决于编译器?)。

void test2(void) {const char* pr = MSG;while (*pr != '\0') {printf("%c", *pr);pr++;}printf("\nDone!");
}

该形式更好。

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

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

相关文章

哈希表的实现(c语言)

实现哈希表的方法有两种方法:开放寻址法 、链地址法 开放寻址法:在开放寻址法中,所有的元素都存储在哈希表的数组中,冲突发生时会探测下一个可用的位置,直到找到一个空闲的位置。这种方法保持了元素的顺序,…

基于观察者模式设计的框架-REB,使代码模块化

设计模式里面的观察者模式,一直是作者想去设计一套框架来阐述这一个模式,因此REB(Rice Event Broker)就是为了完成观察者模式的一个框架。 观察者模式 聊REB之前,我们聊聊观察者模式带给我们特性,他能对我们框架设计提供什么好处…

双十一期间如何抢占流量,打造品牌爆款产品

进入10月末,也就进入了电商行业的大促流量红利期。如何提前规划大促期间,店铺流量扩张的计划,提前抢占流量,是每一个品牌方都需要考虑的问题。今天为大家分享下双十一期间如何抢占流量,打造品牌爆款产品! 一…

Nginx请求参数解析

例: $arg_token 取的就是 uri?args 中 tokenxxx 的部分 $arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。$args #这个变量等于请求行中(GET请求)的参数,例如foo123&barblahblah;$binary_remote_addr #二进制的客户地…

JNI相关问题

一:NDK的函数调用时出现 “UnsatisfiedLinkError : 函数名” 这样的异常 解决办法: 网上能找到的提醒无一不是让你去仔细检查NDK中的函数命名是否正确,也就是“JAVA_调用该函数的JAVA类名(完整路径区分大小写)_函数名…

Vue_Bug error0308010Cdigital envelope routinesunsupported

Bug描述: error0308010Cdigital envelope routinesunsupported 解决方法: Just add this to the top of vue.config.js : const crypto require(crypto);/*** md4 algorithm is not available anymore in NodeJS 17 (because of lib SSL 3).* In that…

TypeScript进阶知识之接口(接口定义、接口属性、可索引类型、接口表示函数类型、额外的属性检查、接口继承、接口与类型别名的区别)

系列文章目录 引入一:Typescript基础引入(基础类型、元组、枚举) 引入二:Typescript面向对象引入(接口、类、多态、重写、抽象类、访问修饰符) 第一章:Typescript基础知识(Typescri…

浅谈安科瑞无线测温设备在俄罗斯某项目的应用

摘要:安科瑞ATE系列和ARTM-Pn无线测温设备适用于高低压柜的梅花触头,线缆,母排等位置对温度的实时监测。 Abstract: ATE series and ARTM-Pn are suitable for monitoring the real-time temperature of circuit breaker contact,cable,busb…

跨境电商:为民营经济注入新活力

中国的民营经济一直以来都是国家经济发展的中流砥柱,而近年来,跨境电商产业崭露头角,为民营经济注入了新的活力和机遇。本文将探讨跨境电商如何成为中国民营企业的助推引擎,以及其对民营经济的积极影响。 民营经济的支柱地位 中国…

ChatGPT AIGC 完成Excel跨多表查找操作vlookup+indirect

VLOOKUP和INDIRECT的组合在Excel中用于跨表查询,其中VLOOKUP函数用于在另一张表中查找数据,INDIRECT函数则用于根据文本字符串引用不同的工作表。具体操作如下: 1.假设在工作表1中,A列有你要查找的值,B列是你希望查询的工作表名称。 2.在工作表1的C列输入以下公式:=VLO…

iMeta框架使用方法

📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

判断非线性负载是否合格的方法可以从以下几个方面进行考虑:

额定功率容量:需要了解负载设备的额定功率容量,根据负载设备的规格和说明书,确定其额定功率容量是否能够满足实际需求,如果超过了负载设备的额定功率容量,可能会导致设备过载,从而影响其正常运行。 电压波形…

JVM 垃圾回收机制(可达性分析、引用计数)

目录 1 什么是垃圾2 为什么需要回收3 哪些对象被判定为垃圾呢3.1 引用计数法3.2 可达性分析算法:GC Roots根 1 什么是垃圾 垃圾是指在运行程序中没有任何指针指向的对象,就是需要被回收的。 2 为什么需要回收 执行程序会不断地分配内存空间&#xff0c…

分布式事务协调中间件---seata快速入门

分布式事务 Seata,之前叫做Fescar,是一个开源的分布式事务解决方案,它主要致力于提供高效和简单的分布式事务服务。Seata主要用于解决微服务架构下的数据一致性问题。 Seata 的基本原理是基于两阶段提交 (2PC) 以及三阶段提交 (3PC)&#xff…

宏定义实现二进制数的奇偶位交换

思路分析 通过宏定义来实现二进制数的奇偶位交换,如果一个个遍历交换的话,那得算到猴年马月,这是我在网上看到的一个思路: 我们将每一位(整数在计算机里存储是4字节,32位)二进制数的奇数位保留…

nodejs+vue水浒鉴赏平台系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

EtherCat

百度安全验证 EtherCAT(Ethernet for Control Automation Technology)是一种高性能、实时性强的工业以太网通信协议,它可以实现多个从站设备通过一个主站设备进行控制和通信。 主站: EtherCAT主站是指控制整个EtherCAT网络的设备…

C++ 反向迭代器

反向迭代器的即正向迭代器的--,反向迭代器的--即正向迭代器的,反向迭代器和正向迭代器的很多功能都是相似的,因此我们可以复用正向迭代器作为反向迭代器的底层容器来封装,从而实现出反向迭代器,即:反向迭代…

vue3后台管理框架之Mock开发

前言 在前后端对接中,有时后端的接口数据没有 那么快能给出,因此我们可以通过mock模拟自己的请求数据,在后端接口没有给出的同时,先使用mock请求的数据完成前端相关的逻辑 官方文档:vite-plugin-mock vite 的数据模拟插件,是基于 vite.js 开发的。 并同时支持本地环境…

并查集-合并集合

文章目录 QuestionIdeasCode Question 一共有 n 个数,编号是 1∼n ,最开始每个数各自在一个集合中。 现在要进行 m 个操作,操作共有两种: M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经…