C语言指针易错点—字符数组与字符指针

news2024/9/29 18:10:01

C语言指针易错点—字符数组与字符指针

  • 字符数组与字符指针的区别
  • 字符数组与字符指针的区别举例
  • 字符指针必须先赋值,后引用

字符数组与字符指针的区别

因为字符数组与字符指针都可以表示字符串,但他们不是等价的。下面就来讲讲他们的区别。

char sa[ ] = "This is a string";
char *sp = "This is a string";

二者都是用字符串"This is a string"来初始化,第一个定义创建字符数组sa,它的元素依次是:‘T’ ‘h’ ‘i’ …

第二个定义创建一个指针变量sp指向 常量区字符串 “This is a string”


对于字符数组sa,系统首先为数组分配足够的内存空间,然后将"This is a string"里面的字符逐个存入数组,并加字符串结束符号’\0’

在这里插入图片描述
这就相当于 char sa[]= {'T','h',........,'\0'}这样

如果要改变数组sa所代表的字符串,只能改变数组元素的内容,如sa[0]=‘t’;
不能修改数组名以及赋值,它是常量

 

对于字符指针sp来说,这就相当于一个指针变量指向一个字符串常量 “This is a string” 的 首地址

在这里插入图片描述

如果要改变指针sp所代表的字符串,只能改变指针的值,让它指向新的字符串,不能改变其元素,如sp[0]=‘t’;非法内存访问。字符串常量”This is a string"不允许修改。

就是说字符串是常量,不能修改里面元素,可以改变指针的指向改变内容,或者使用字符串函数strcpy等


 

字符数组与字符指针的区别举例

char sa[ ] = “This is a string”;
char *sp = “This is a string”;

  • 问题1:把sa和sp中的‘T’变为’t’
    sa[0]=‘t’; //合法
    sp[0] = ‘t’; //非法内存访问。字符串常量不允许被修改
    应该用:char *sp=“this is a string”;

  • 问题2: 把字符串sa和sp的内容改为: “Hello”
    sp=“Hello”;
    sa=“Hello” // 非法,数组名是常量,不能对它赋值
    应该用:strcpy(sa,“Hello”);


 

字符指针必须先赋值,后引用

定义字符指针后,如果没有赋值,指针的值不确定,会很危险,会造成非法内存访问,形成 野指针

例如:

char *s;
scanf("%s",s); //非法内存使用

所以字符指针变量常用的方法是

  1. 指向已经存在的字符数组首地址。
  2. 指向一个动态分配的内存块

扩展练习: 判断实数相同

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

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

相关文章

信号类型(雷达)——脉冲雷达(三)

系列文章目录 《信号类型(雷达通信)》 《信号类型(雷达)——雷达波形认识(一)》 《信号类型(雷达)——连续波雷达(二)》 文章目录 前言 一、相参雷达 1…

第一章 计算机视觉概述

《计算机视觉开发实战 基于Python》 朱文伟,李建英 著 1.1 图像的基本概念 图像和图形 图像是输入设备捕捉的实际画面产生的数字图像,由像素点构成的位图。图形是用数学规则产生的或具有一定规则的团,由外部轮廓线条构成的矢量图,往往用一组…

有趣的Hack-A-Sat黑掉卫星挑战赛——卫星平台内存dump

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…

AI_Papers周刊:第三期

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 2023.02.20—2023.02.26 文摘词云 Top Papers Subjects: cs.CL 1.LLaMA: Open and Efficient Foundation Language Models 标题:LLaMA:开放高效的基础语言模型 作者&#…

14、KL散度

KL 散度,是一个用来衡量两个概率分布的相似性的一个度量指标。 现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样本,我们会…

5、算法MATLAB---矩阵的运算和索引

矩阵的运算和索引1、矩阵的运算1.1 获取矩阵的行列数1.2 矩阵转置、逆矩阵1.3 特征值和特征向量1.4 加减乘除乘方运算1.5 广播机制1.6 逻辑运算2、矩阵的索引1、矩阵的运算 1.1 获取矩阵的行列数 使用size函数 1.2 矩阵转置、逆矩阵 使用【】和inv函数 1.3 特征值和特征…

NLP中的对话机器人——预训练基准模型

引言 本文是七月在线《NLP中的对话机器人》的视频笔记,主要介绍FAQ问答型聊天机器人的实现。 场景二 上篇文章中我们解决了给定一个问题和一些回答,从中找到最佳回答的任务。 在场景二中,我们来实现: 给定新问题,从…

【华为OD机试模拟题】用 C++ 实现 - 匿名信(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

全网最全——Java 数据类型

一、数据类型方法论 程序本质上是对数据的处理(逻辑运算),因此任何语言都需先解决如何表征【数据】这个核心概念。数据作为抽象的概念,天然的包含2个方面属性: 类型:类型决定了数据只能和同类型的数据进行…

18、MySQL8其它新特性

文章目录1 MySQL8新特性概述1.1 MySQL8.0 新增特性1.2 MySQL8.0移除的旧特性2 新特性1:窗口函数2.1 使用窗口函数前后对比2.2 窗口函数分类2.3 语法结构2.4 分类讲解1 序号函数2 分布函数3 前后函数4 首尾函数5 其他函数2.5 小 结3 新特性2:公用表表达式…

Objective-C 构造方法的定义和声明规范

总目录 iOS开发笔记目录 从一无所知到入门 文章目录源码中 NSArray 的构造方法与命名规律自定义类的构造方法命名截图代码输出源码中 NSArray 的构造方法与命名规律 interface NSArray<ObjectType> (NSArrayCreation) (instancetype)array;(instancetype)arrayWithObject…

Spring Cloud Alibaba全家桶(二)——微服务组件Nacos注册中心

前言 本文为微服务组件Nacos注册中心相关知识&#xff0c;下边将对什么是 Nacos&#xff0c;Nacos注册中心&#xff08;包括&#xff1a;注册中心演变及其设计思想、核心功能&#xff09;&#xff0c;Nacos Server部署&#xff08;包括&#xff1a;单机模式、集群模式&#xff…

常见的开发模型和测试模型

软件的生命周期软件开发阶段的生命周期需求分析->计划->设计->编码->测试->运维软件测试阶段的生命周期需求分期->测试计划->测试设计与开发->执行测试->测试评估开发模型瀑布模型可以看到,这个模型和我们上面的软件开发生命周期很相似采用的是线性…

[LeetCode周赛复盘] 第 334 场周赛20230226

[LeetCode周赛复盘] 第 334 场周赛20230226 一、本周周赛总结二、 [Easy] 6369. 左右元素和的差值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6368. 找出字符串的可整除数组1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6367. 求出最多标记下标1. 题目描述2. 思路分析3…

软件测试面试项目问答怎么回答才能让面试官认可?

四、项目4.1 简单介绍下最近做过的项目根据自己的项目整理完成&#xff0c;要点&#xff1a;1&#xff09;项目背景、业务、需求、核心业务的流程2&#xff09;项目架构&#xff0c;B/S还是C/5&#xff0c;数据库用的什么? 中间件用的什么&#xff1f;后台什么语言开发的&…

vue3+rust个人博客建站日记1-框架开发环境配置。

背景 阅读了陈皓老师《左耳听风》栏目后&#xff0c;更觉个人知识体系停留在“知道”的阶段&#xff0c;真正动起手来&#xff0c;处处制肘。故决定重新上路&#xff0c;按照《左耳听风》的路线&#xff0c;锻炼一下自己。 个人博客建站&#xff0c;主要是为了熟悉一门前端与…

springboot+vue结合,后端学习前端(三)(前端拦截器+后端拦截器)未登录访问其他页面,直接进入登陆界面

前端拦截器后端拦截器处理#号问题使用 History 模式前端部署到后端项目里&#xff08;tomcat版本由8.5.23需要提高到9.0.56了&#xff09;默认的错误页面后端登录拦截器LoginController添加sessionLoginInterceptor拦截器配置到项目里Vuex 与前端登录拦截器下载 Vuex引入Vuex修…

我继续问了ChatGPT关于SAP顾问职业发展前景的问题,大家感受一下

目录 SAP 顾问 跟其他IT工作收入情况相比是怎么样的&#xff1f; 如何成为SAP FICO 优秀的顾问 要想成为SAP FICO 优秀的顾问 &#xff0c;需要ABA开发技能吗 SAP 顾问中哪个类型收入最多&#xff1f; 中国的ERP软件能够取代SAP吗&#xff1f; SAP 顾问 跟其他IT工作收入情…

java+springboot+vue高校学生医疗保险管理系统

医保管理系统是对与职工健康息息相关的档案进行的系统化、自动化的管理&#xff0c;主要是对职工办理的医疗保险的管理&#xff0c;本系统能够很好的适应社会的需求&#xff0c;最大化的为城镇职工提供服务。医疗保险是国家社会保障体系的重要组成部分&#xff0c;也是社会保险…

【Linux】零成本在家搭建自己的私人服务器解决方案

我这个人自小时候以来就特喜欢永久且免费的东西&#xff0c;也因此被骗过&#xff08;花巨款买了永久超级会员最后就十几天&#xff09;。 长大后骨子里也是喜欢永久且免费的东西&#xff0c;所以我不买服务器&#xff0c;用GitHubPage或者GiteePage搭建自己的静态私人博客&…