C语言(字符数组和字符指针)
字符串实现
在C语言中,表示一个字符串有以下两种形式:
- 用字符数组存放一个字符串。
- 用字符指针指向一个字符串。
案例
#include <stdio.h>/*** 方式1:使用字符数组实现字符串*/
void str_test1(){// 定义一个伪字符串char str[] = "I Love You";printf("%s\n",str);}/*** 方式2:使用字符指针实现字符串*/
void str_test2(){// 定义一个伪字符串char *str = "I Love You";printf("%s\n",str);}int main(int argc,char *argv[]){str_test1();str_test2();return 0;}
注意:字符数组和字符指针变量都能实现字符串的存储与运算。(字符指针—> 字符类型的指针变量)
字符数组和字符指针的联系
字符数组由元素组成,每个元素中存放一个字符,而字符指针变量中存放的是地址,也能作为函数参数。
只能对字符数组中的各个元素赋值,而不能用赋值语句对整个字符数组赋值。
char arr[3];arr[2] = 'A'; // 正确,对字符数组中的元素赋值
arr = {'A','B','C'}; // 错误,(可以理解为数组名就是一个常量,也就是一旦创建,就不能再改变)
字符数组名虽然代表地址,但数组名的值不能改变,因为数组名是常量。
对于字符串中字符的存取,可以用下标法,也可以用指针。
#include <stdio.h>int main(int argc,char *argv[]){// 使用两种方式定义字符串char str1[] = "你好,张欣!";char *str2 = "你好,张欣!";// 我们将数据类型为char的指针变量称之为字符指针// 测试赋值// str1 = "你好,张鹏!"; // 不能对字符数组整体赋值,如果要赋值,请使用string库下strcpy();str2 = "你好,张鹏!";// 打印输出printf("%s,%s\n",str1,str2);char a[] = "I Love You!";char *b = "I Love You!";// 使用下标法和指针法来访问字符串printf("%c,%c,%c,%c\n",a[2],*(a+2),b[2],*(b+2));return 0;}
字符串作为形式参数
实参与形参都可以是字符数组
void fun(char str[],int len){..}void main(){char str[] = "hello";fun(str,sizeof(str) / sizeof(str[0]));};
实参用字符数组,形参用字符指针
void fun(char *str,int len){str[2] = 'A'; // GCC编译环境可通过
}void main(){char str[] = "hello";// 常量池,此时的赋值,将常量池中的数据读取出来,存入到栈中数组对应的位
置fun(str,sizeof(str) / sizeof(str[0]);}
实参和形参都是指针变量(在函数内部不能对字符串中的字符做修改)
void fun(char *str,int len){str[2] = 'A'; // 错误,字符串常量一旦创建,就不能被改变
}void main(){char *str = "hello";fun(str,sizeof(str) / sizeof(str[0]);}
实参是指针类型,形参是字符数组(在函数内部不能对字符串中的字符做修改)
void fun(char str[],int len){str[2] = 'A'; // 错误,字符串常量一旦创建,就不能被改变
}void main(){char *str = "hello";fun(str,sizeof(str) / sizeof(str[0]);}
注意:
- 字符数组在创建的时候,会在内存中开辟内存空间,内存空间可以存放字符数据;字符指针在
创建的时候,需要依赖于字符数组,字符指针在内存开辟的内存空间中,存放的是数组元素的
地址。字符指针的创建依赖于字符数组,字符数组可以独立存在,而字符指针不能独立存在。 - 字符数组可以初始化,但是不能赋值;字符指针可以初始化,也可以赋值。
案例
#include <stdio.h>/*** 定义一个函数,实现字符串的拷贝,返回字符串长度* @param source 拷贝的源字符串* @param target 需要保存拷贝数据的目标字符串* @return 字符串的大小*/
int str_copy(char *source,char *target){// 定义一个循环变量int i = 0;while(source[i]!='\0'){// 实现拷贝*(target+i) = *(source+i);// 指针法// target[i] = source[i];// 下标法i++;}// 拷贝结束后,一定要给target末尾加上\0target[i] = '\0';return i;}int main(int argc,char *argv[]){// 定义两个数组,从键盘录入字符串char source[20],target[20];printf("请输入一个字符串:\n");scanf("%s",source);int len = str_copy(source,target);printf("%s,%s,%d\n",source,target,len);return 0;}
案例
#include <stdio.h>/*** 定义一个函数,实现字符串的截取* @param source 源字符串* @param start 开始截取的位置* @param end 截取结束的位置* @param target 截取后的字符串* @return 新字符串长度*/
int str_split(char *source,int start,int end,char *target){// 定义循环变量int i = 0, k = 0;// 遍历源字符串(数组)while(source[i] != '\0'){// 根据位置截取if(i >= start && i < end){// 将截取的字符串存入target "helloworld"target[k] = source[i];k++;}i++;}// 新字符串需要末尾添加\0target[k] = '\0';return k;}int main(int argc,char *argv[]){char *str = "abcdefg";char target[100];int len = str_split(str,2,5,target);printf("%s,%s,%d\n",str,target,len);return 0;}
相关文章:
C语言(字符数组和字符指针)
字符串实现 在C语言中,表示一个字符串有以下两种形式: 用字符数组存放一个字符串。用字符指针指向一个字符串。 案例 #include <stdio.h>/*** 方式1:使用字符数组实现字符串*/ void str_test1(){// 定义一个伪字符串char str[] &q…...
SkyWalking Helm Chart 4.7.0 安装、配置
https://skywalking.apache.org/events/release-apache-skywalking-kubernetes-helm-chart-4.7.0/https://github.com/apache/skywalking-helm/tree/v4.7.0https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/简介 skywalking 是分布式系统的 APM(Applicat…...
微搭低代码AI组件单词消消乐从0到1实践
目录 1 为什么要开发单词消消乐2 需要具备什么功能3 采用什么技术方案实现4 逻辑设计4.1 数据结构设计4.2 游戏的核心逻辑4.3 数据设计 5 代码详解5.1 导入依赖5.2 定义函数组件5.3 数据初始化5.4 状态定义5.5 打乱解释的逻辑5.6 定义选择单词的函数5.7 定义选择解释的函数5.8 …...
23种设计模式之中介者模式
目录 1. 简介2. 代码2.1 Mediator (中介者接口)2.2 ChatRoom (具体中介者类)2.3 User (同事接口)2.4 ChatUser (具体同事类)2.5 Test (测试)2.6 运行结果 3. …...
【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式
并发模式 下例重新对 channel 的用法进行回顾: package mainimport ("fmt""math/rand""time" )func msgGen(name string) chan string {c : make(chan string)go func(name string) { // 在这个 goroutine 当中向外发送数据i : 0fo…...
unity打包web,如何减小文件体积,特别是 Build.wasm.gz
unity打包WebGL,使用的是wasw,最终生成的Build.wasm.gz体积很大,有6.5M,有几个方法可以稍微减小这个文件的大小 1. 裁剪引擎代码: 此步可将大小从6.5减小到 6.2(此项默认开启,只是改了裁剪等级…...
go引入skywalking
前置条件:安装好jdk11,linux服务器(centos7.9),go版本(我的是1.18,1.21都可以) 1.下载skywalking Downloads | Apache SkyWalking 2.下载agent源码 Downloads | Apache SkyWalkin…...
大华DSS数字监控系统 attachment_downloadAtt.action 任意文件下载漏洞复现
0x01 产品描述: 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。0x02 漏洞描述: 大华DSS数字监控系统 attachment_downloadAtt.action接口存在任意文件读取漏洞,未经身份验证攻击者可通过该漏洞读取…...
qt 封装 调用 dll
这个目录下 ,第一个收藏的这个 ,可以用, 但是有几个地方要注意 第一.需要将dll的头文件添加到qt的文件夹里面 第二,需要在pro文件里面添加动态库路径 第三,如果调用dll失败,那么大概需要将dll文件放在e…...
Python使用Selenium库获取 网页节点元素、名称、内容的方法
我们要用到一些网页源码信息,例如获取一些节点的class内容, 除了使用Beautifulsoup来解析,还可以直接用Selenium库打印节点(元素)名称,用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…...
系统安全——访问控制访问控制
访问控制 概念 什么是访问控制 access control 为用户对系统资源提供最大限度共享的基础上,对用户的访问权进行管理,防止对信息的非授权篡改和滥用 访问控制作用 保证用户在系统安全策略下正常工作 拒绝非法用户的非授权访问请求 拒绝合法用户越权…...
SQL Server 数据库还原到某个时点(完整恢复模式)
将 SQL Server 数据库还原到某个时点(完整恢复模式) 适用范围: SQL Server 本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 将数据库还原到 SQL Server 中的某个时间点。 本主题仅与使用完整恢复模式或大容量日志恢复模…...
埃隆马斯克X-AI发布Grok-2大模型,快来体验~
引言 近年来,人工智能技术的快速发展推动了大语言模型的广泛应用。无论是日常生活中的智能助手,还是行业中的自动化解决方案,大语言模型都扮演着越来越重要的角色。2024年,X-AI推出了新一代的大模型——Grok-2,这款模…...
Python工厂设计模式:简化对象创建
Python工厂设计模式:简化对象创建 引言什么是工厂模式?简单工厂模式示例定义基类和子类创建工厂类使用工厂创建对象 优点使用场景总结 引言 在编程中,我们经常需要创建不同的对象,但有时创建对象的逻辑可能会变得复杂。工厂设计模…...
【隐私计算篇】隐私集合求交(PSI)原理深入浅出
隐私集合求交技术是多方安全计算领域的一个子问题,通常也被称为安全求交、隐私保护集合交集或者隐私交集技术等,其目的是允许持有各自数据集的双方或者多方,执行两方或者多方集合的交集计算,当PSI执行完成,一方或者两方…...
工作中常用的8种设计模式
前言 设计模式在我们日常的软件开发中无处不在,它们帮助我们编写更易扩展、更具可读性的代码。 今天结合我实际工作场景和源码实例,跟大家一起聊聊工作中最常用的8种设计模式,希望对你会有所帮助。 1. 单例模式 单例模式确保一个类只有一…...
Qwen 论文阅读记录
本文仅作自己初步熟悉大模型,梳理之用,慢慢会更改/增加/删除,部分细节尚未解释,希望不断学习之后,能够完善补充。若有同道之人,欢迎指正探讨。 关于后面的code-qwen and math-qwen,我个人认为依…...
自动驾驶:百年演进
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
SSM 校园一卡通密钥管理系统 PF 于校园图书借阅管理的安全保障
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装校园一卡通密钥管理系统软件来发挥其高效地信息处理的作用&a…...
什么叫中间件服务器?
什么叫中间件服务器?它在软件架构中扮演着怎样的角色?在现代应用程序开发中,中间件服务器的概念很多人对它并不太熟悉,但其实它的作用却不小。 中间件服务器是一种连接不同软件应用程序的中介。想象一下,在一个大型企…...
保姆级教程:在Linux服务器上部署LiuJuan20260223Zimage国风模型
保姆级教程:在Linux服务器上部署LiuJuan20260223Zimage国风模型 想在自己的服务器上体验一下国风AI绘画的魅力吗?最近发现一个挺有意思的模型,叫LiuJuan20260223Zimage,专门生成国风风格的图片。今天我就手把手带你,在…...
HTML转Word终极指南:浏览器端文档转换的实战手册
HTML转Word终极指南:浏览器端文档转换的实战手册 【免费下载链接】html-docx-js Converts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js 还在为网页内容无法完美导出到Word而烦恼吗?html-do…...
Qt信号槽连接失败?别慌,先检查你的槽函数是不是放错了地方(private vs private slots实战解析)
Qt信号槽连接失败?别慌,先检查你的槽函数是不是放错了地方(private vs private slots实战解析) 1. 问题重现:为什么我的槽函数不响应信号? 上周在代码评审时,团队新人小张提交了一段看似标准的Q…...
2026年一文讲透|巅峰之作的AI论文网站——千笔AI
你是否在论文写作中屡屡受挫?选题迷茫、框架混乱、查重焦虑……这些难题是否让你夜不能寐?千笔AI,专为2026届学生打造的智能论文助手,用AI技术重新定义学术写作体验。千笔AI(官网直达入口) :https://www.qianbixiezuo.…...
RVC模型推理性能对比:不同GPU服务器配置下的速度与效果评测
RVC模型推理性能对比:不同GPU服务器配置下的速度与效果评测 最近在折腾RVC模型,发现一个挺实际的问题:同样的模型,放在不同的GPU服务器上跑,效果和速度能差多少?这直接关系到我们做项目时的成本预算和体验…...
阿里达摩院AI Earth平台功能调整公告(下线数据检索功能、下线处理与分析功能中的开发者模式、下线模型训练功能和下线应用空间功能等)
这个公告是近两年来阿里达摩院的第一个公告,上次的公告最近的时间是2024年4月11日。 AI Earth云平台因发展策略调整,将于2026年4月20日对部分功能进行下线或调整: 下线功能:数据检索及公共数据资源、开发者模式与工具箱基础处理/共…...
保姆级教程:Windows下PaddlePaddle GPU版环境配置(含CUDA 12.0+cuDNN 8.9.1避坑指南)
Windows系统PaddlePaddle GPU环境配置全攻略:从驱动安装到性能调优 1. 环境准备与基础概念解析 在开始配置PaddlePaddle GPU环境之前,我们需要先理解几个关键概念和它们之间的关系。GPU加速的深度学习环境本质上是一个分层架构,从底层硬件到…...
CS5490电能计量芯片UART驱动与校准实战指南
1. CS5490电能计量芯片驱动库技术解析与嵌入式工程实践CS5490是Cirrus Logic公司推出的高精度单相电能计量SoC芯片,集成ΔΣ模数转换器、数字信号处理器(DSP)、电压/电流通道增益校准电路、温度传感器及UART通信接口。该芯片专为智能电表、能…...
Unity物理引擎中的FixedUpdate:原理、应用与性能优化
1. FixedUpdate的核心原理与工作机制 在Unity游戏开发中,物理模拟的稳定性往往决定着游戏体验的好坏。想象一下你正在玩一款赛车游戏,如果每次碰撞时车辆的反应都不一致,或者在不同性能的设备上物理表现差异巨大,这种体验会非常糟…...
AI转行风口已至!揭秘高薪岗位、薪资待遇及普通人成功秘诀
本文详细解析了AI行业的核心岗位,包括AI产品经理、AI解决方案专家、AI应用工程师、AI算法工程师和AI运营/数据运营等,并提供了相应的薪资范围和关键词。文章还讨论了转行AI岗位的核心技能和包装方法,强调了理解AI原理、数据准备、Prompt工程、…...
