指针引用字符串问题(详解)

news2024/9/27 15:32:16

通过指针引用字符串可以更加方便灵活的使用字符串。

 字符串的引用方式有两种,下面简单介绍一下这两种方法。

1.用字符数组来存放一个字符串。

1.1

可以通过数组名和下标来引用字符串中的一个字符。

1.2

还可以通过数组名和格式声明符%s输出整个字符串。

具体实现代码如下:

#include <stdio.h>
int main()
{
	char ch[] = "xuejiejie";
	printf("%s\n", ch);    //输出整个数组
	printf("%c\n", ch[1]); //输出第2个字符
	return 0;
}

结果:

xuejiejie
u

D:\VS\Project4\x64\Debug\Project4.exe (进程 17608)已退出,代码为 0。
按任意键关闭此窗口. . .

2.用字符指针变量引用字符串常量。

先来举个例子:

#include <stdio.h>
int main()
{
	const char* string = "xuejiejie";
	printf("%s\n",string);
	return 0;
}

结果:

xuejiejie

D:\VS\Project4\x64\Debug\Project4.exe (进程 17916)已退出,代码为 0。
按任意键关闭此窗口. . .

分析:

在c语言中对字符串常量是按照字符数组来处理,所以首先在内存中开辟一个连续字符数组来存放该字符串常量。

但是通过上面的代码我们可以发现字符串是没有数组名的,所以只能通过指针变量来引用。

其实在对指针进行赋值时,只是把字符串中的第一个字符的地址(首元素地址)赋值给指针变量。

对上面string而言就是把“x”的地址赋值给string。(注意不是把整个xuejiejie赋值给string)

错误示范:

	const char* string = "xuejiejie";
	*string = "xuejiejie";

 注意:当对一个数值型的数组时只用数组名是不能输出整个数组的,只能一个一个输出。

对于字符串的存取,可以采用下标法,指针法和指针变量法。

如下所示:

#include <stdio.h>
#include <string.h>
int main()
{
	char a[] = "xuejiejie";
			//下标法
	for (int i = 0; i < strlen(a); i++)
	{
		printf("%c", a[i]);
	}
	printf("\n");
			//指针变量
	char* ch;
	ch = a;
	printf("%s\n", ch);
	for (; *ch != '\0'; ch++)
	{
		printf("%c", *ch);
	}

	return 0;
}

    结果:
 

xuejiejie
xuejiejie
xuejiejie
D:\VS\Project4\x64\Debug\Project4.exe (进程 8860)已退出,代码为 0。
按任意键关闭此窗口. . .


字符指针作为函数参数时

函数的形参和实参都可以分别用字符数组名或字符指针变量来表示。

具体情况如下表所示:

实参形参
字符数组名字符数组名
字符数组名字符指针变量
字符指针变量字符指针变量
字符指针变量字符数组名

比较字符指针变量和字符数组

1.

字符数组是由许多元素组成的,里面只能一个一个来存放一个字符,存放的是‘字符’,而字符指针只是存放字符串中第一个字符的地址,而不是整个字符,

2.

可以对字符指针变量进行赋值,而不能对数组名进行赋值。(数组名代表地址,是常量,不能赋值)

3.

初始化含义不同。数组可以在定义时随便对其赋值,但不能用赋值语句对字符数组中的全部元素整体赋值。而指针数组可以后再进行赋值语句。

4.

开辟的存储空间不同。字符数组将会根据字符串长度或者人为定义的长度来分配储存单元。而字符指针变量,只会分配一个储存单元,用来存放首元素地址。

5.

指针变量的值后期可以自行设定改变,而字符数组的数组名代表一个固定的值(首元素地址)不能改变。

6.

字符数组中各元素的值可以改变,而字符指针变量指向的字符串常量中的内容是不能改变的。

 

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

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

相关文章

【项目精选】百货中心供应链管理系统

点击下载源码 近年来&#xff0c;随着计算机技术的发展&#xff0c;以及信息化时代下企业对效率的需求&#xff0c;计算机技术与通信技术已经被越来越多地应用到各行各业中去。百货中心作为物流产业链中重要的一环&#xff0c;为了应对新兴消费方式的冲击&#xff0c;从供货到销…

第五十二章 BFS进阶(二)——双向广搜

第五十二章 BFS进阶&#xff08;二&#xff09;——双向广搜一、双向广搜1、优越之处2、实现逻辑3、复杂度分析二、例题1、问题2、分析3、代码一、双向广搜 1、优越之处 双向广搜是指我们从终点和起点同时开始搜索&#xff0c;当二者到达同一个中间状态的时候&#xff0c;即相…

Python __all__变量用法

事实上&#xff0c;当我们向文件导入某个模块时&#xff0c;导入的是该模块中那些名称不以下划线&#xff08;单下划线“_”或者双下划线“__”&#xff09;开头的变量、函数和类。因此&#xff0c;如果我们不想模块文件中的某个成员被引入到其它文件中使用&#xff0c;可以在其…

【算法题解】15. 设计最小栈

这是一道 中等难度 的题。 题目来自&#xff1a;leetcode 题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在 常数时间 内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void p…

C语言-重点知识总结-建议收藏(完结)

一图带你梳理C语言重点知识。图片解析&#xff1a;这张图从C语言初阶开始&#xff0c;一直讲解到C语言进阶的知识。在C语言初阶&#xff1a;从初识C语言开始学习&#xff1a;初识C语言带你进入C语言的大门&#xff0c;了解C语言的魅力。然后为你讲解C语言的基本语法&#xff1a…

软件测试只会“点点点”,凭什么让开发看的起你?

众所周知&#xff0c;如今无论是大厂还是中小厂&#xff0c;自动化测试基本是标配了&#xff0c;毕竟像双 11、618 这种活动中庞大繁杂的系统&#xff0c;以及多端发布、多版本、机型发布等需求&#xff0c;但只会“写一些自动化脚本”很难胜任。这一点在招聘要求中就能看出来。…

开源代码的寿命为何只有1年?

说实话&#xff0c;如果古希腊的西西弗斯是一个在2016年编写开源代码的开发者&#xff0c;那他会有宾至如归的感觉。著名的西西弗斯处罚&#xff0c;是神话流传下来的&#xff0c;他被迫推一块巨大的石头上山&#xff0c;当登顶之后&#xff0c;只能眼睁睁看着它滚下去&#xf…

国内唯一一部在CentOS下正确编译安装和使用RediSearch的教程

开篇 Redis6开始增加了诸多激动人心的模块&#xff0c;特别是&#xff1a;RedisJSON和RediSearch。这两个模块已经完全成熟了。它们可以直接使用我们的生产上的Redis服务器来做全文搜索&#xff08;二级搜索&#xff09;以取得更廉价的硬件成本、同时在效率上竟然超过了Elastic…

基于人工大猩猩部队优化CNN-LSTM(GTO-CNN-LSTM)多变量时间序列预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

移动测试相关

一、环境搭建 准备工作&#xff1a; &#xff08;python、pycharm安装配置好&#xff09; 1、Java SDK 安装配置 Java Downloads | Oracle 下载安装后配置系统环境变量&#xff1a;JAVA_HOME&#xff08;jdk根目录路径&#xff09;和path&#xff08;jdk根目录下的bin目录路径…

opencv的环境搭建

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

CV——day75 读论文:基于差分特征融合CNN的轨道交通目标检测

Differential feature fusion convolutional neural network基于差分特征融合CNN的轨道交通目标检测I. INTRODUCTIONII. RELATED WORKSIII. NETWORK ARCHITECTUREA. Prior Detection ModuleB. Object-Detection ModuleV. CONCLUSION基于差分特征融合CNN的轨道交通目标检测 基于…

数据仓库层Repository(CrudRepository、PagingAndSortingRepository、JpaRepository)

什么是数据仓库层Repository&#xff1f; 数据仓库接口的作用&#xff1a;Repository原意指的是仓库&#xff0c;即数据仓库的意思。Repository居于业务层和数据层之间&#xff0c;将两者隔离开来&#xff0c;在它的内部封装了数据查询和存储的逻辑。 Repository接口&#xff…

从运维角度看微服务 k8s部署微服务【偏理论】【AL】

从运维角度看微服务 & 部署微服务【偏理论】 1、微服务的特点 服务组件化&#xff1a; 每个服务独立开发、部署&#xff0c;有效避免一个服务的修改引起整个系统重新部署。 技术栈灵活&#xff1a; 约定通信方式&#xff0c;使得服务本身功能实现对技术要求不再那么敏感。…

MybatisX:简单却不失强大

插件介绍MyBatisX是一款基于MyBatis、开源的持久层框架&#xff0c;它提供了对数据库的操作方法。MyBatisX则是MyBatis的升级版本&#xff0c;提供了更丰富的功能。MyBatisX提供了一个强大的SQL映射系统&#xff0c;允许开发人员在数据库和Java对象之间建立映射。MyBatisX的特点…

spring的注入(set注入、构造器注入)

目录 一、介绍 1.set注入和构造器注入是什么&#xff1f; 2.通俗的理解 3.set注入和构造器注入的核心原理 4.set注入和构造器注入的类型 5.set注入的外部bean和内部bean 二、set注入和构造器注入例子步骤&#xff08;引用数据类型&#xff09; &#xff08;一&#xf…

Windows安装系列:部署FTP文件服务

1、下载服务端 http://www.serv-u.com.cn/dl/SERVU-Fulltrial-WINDOWS.zip 2、安装ftp服务 2.1、指定位置安装Server-U 2.2、安装最后一步&#xff0c;允许将Server-U添加到防火墙例外列表中 3、配置Server-U的域 3.1、打开Server-U控制台&#xff0c;进入配置向导&#xff…

2022年山东省职业院校技能大赛网络搭建与应用赛项正式赛题

2022年山东省职业院校技能大赛 网络搭建与应用赛项 第二部分 网络搭建与安全部署&服务器配置及应用 竞赛说明&#xff1a; 一、竞赛内容分布 竞赛共分二个模块&#xff0c;其中&#xff1a; 第一模块&#xff1a;网络搭建及安全部署项目 第二模块&#xff1a;服务…

全网详细解读基于java调用ChatGPT的API接口

文章目录1. 文章引言2. 基于java调用API2.1 环境配置2.2 编写代码3. 重要总结3.1 官网链接地址3.2 开发语言的示例链接1. 文章引言 首先&#xff0c;我们需要访问ChatGPT的官网&#xff0c;官网提供了很多调用ChatGPT的API接口的语言示例&#xff0c;比如java&#xff0c;go&a…

C语言学习小结(1)——初认识C语言

一、C语言概念 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能&#xff0c;但仍然保持着…