C/C++ 字符指针指向字符串的几种方法

news2025/1/16 14:06:00

字符指针指向字符串的方法

      由于字符串在内存中连续存储的特点,可以使用指针进行操作,并且指针必须是字符型的。通常将指针指向字符串的首地址,利用指针的后移可以指向后续字符。

      字符指针指向字符串一般有三种的方法:

(1)为字符指针初始化字符串首地址
      例:

      char *p = "I am happy";
这时字符串常量 "I am happy" 在内存中占用11个字节,以上初始化过程是将这段存储空间的首地址赋给字符型指针p,我们称指针p指向字符串"I am happy",存储示意图如下所示:

例1:字符串指针变量。

#include <stdio.h>
  void main()
 {
    char *string="I love China!";
    printf("%s\n",string);
  }

程序执行结果:

I love China!

Press any key to continue.

注意:

    字符串指针变量的定义说明与指向字符变量的指针变量说明只能按对指针变量的赋值不同来区别。 
例如:
    char c,*p=&c;
表示p是一个指向字符变量c的指针变量。
而:
    char *s="C Language";
则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。
 

(2)为字符指针赋值字符串首地址
     例:

     char *p;
    p = "I am happy";
以上赋值语句“p = "I am happy";”是将字符串存储空间的首地址赋给指针p,然后p便指向字符串。注意不是将字符串赋给指针p。

(3)让指针指向存放字符串的数组
     例:

    char a[20] = "I am happy", *p = a;
以上定义了字符数组a并为之初始化字符串"I am happy",然后定义了字符指针p,将p初始化为指向数组a的首地址,即指向了字符串的第一个字符 'I'。

例2:输出字符串中n个字符后的所有字符。
  #include <stdio.h>
  void main()
  {
      char *ps="this is a book\n";
      int n=10;
      ps=ps+n;
      printf("%s\n",ps);
   }

程序执行结果:

book

Press any key to continue.

例3:在输入的字符串中查找有无‘k’字符。
 #include <stdio.h>
 void main()
 {
    char st[20],*ps;
    int i;
    printf("input a string:\n");
    ps=st;
    scanf("%s",ps);
    for(i=0;ps[i]!='\0';i++)
       if(ps[i]=='k')
      {
           printf("there is a 'k' in the string\n");
           break;
      }
    if(ps[i]=='\0') printf("There is no 'k' in the string\n");
  } 

程序执行结果:

input a string:

abcjhykdfkhy

there is a 'k' in the string

Press any key to continue.

关于“指针操作字符串”的常见错误:

错误1:使用类型不正确的指针指向字符串
     例:

     float *p = "abcde";
     分析:指针的类型决定了其所指存储单元的类型,字符串中的每个字符都是char型的,因此指向字符串的指针必须是char型的。

错误2:使用悬空的字符指针输入字符串

    例:

    char *p;

   gets(p);
   分析:以上定义的指针p未指向任何有效的存储空间,称为指针悬空,此时gets( )输入的字符串将无处存放,解决的办法是必须将p指向已分配的有效存储空间。

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

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

相关文章

【MySQL进阶】多版本并发控制——MVCC

【MySQL进阶】多版本并发控制——MVCC 文章目录【MySQL进阶】多版本并发控制——MVCC一&#xff1a;MVCC 原理1&#xff1a;版本链2&#xff1a;ReadView 简介3&#xff1a;访问记录的规则4&#xff1a;READ COMMITTED —— 每次读取数据前都生成一个 ReadView5&#xff1a;REP…

vue入门到精通(四)

三、vue3组合式API 1、组合式API 1.1 什么是组合式API 组合式 API (Composition API) 是一系列 API 的集合&#xff0c;使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语&#xff0c;涵盖了以下方面的 API&#xff1a; 响应式 API&#xff1a;例…

【安卓学习笔记】Activity的生命周期和加载模式

Activity的生命周期 Activity是安卓应用的重要组成单元之一&#xff0c;其对于安卓的作用类似于Servlet对于Web应用的作用。 整个Activity生命周期的图解如下 具体的生命周期可以总结成如下几个步骤 onCreate()&#xff1a;Activity启动后第一个被调用的函数&#xff0c;常用…

1819. 序列中不同最大公约数的数目

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你一个由正整数组成的数组 nums …

四信5G工业路由器全面支持中国移动研究院5G专网质量探针,满足5G专网高质保障需求

面向工业4.0时代&#xff0c;5G行业应用也在不断拓展&#xff0c;大量的5G专网兴起&#xff0c;“一业带百业”效果显著&#xff0c;截至2022年9月&#xff0c;我国5G行业虚拟专网数量已超过1万张&#xff0c;5G已在全国200余家智慧矿山、1700余家智慧工厂、250余个智慧电网项目…

SOFA Weekly|铜锁探「密」、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…

Shiro【授权、整合Spirng、Shiro过滤器】

前言 本文主要讲解的知识点有以下&#xff1a; Shiro授权的方式简单介绍与Spring整合初始Shiro过滤器 一、Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了&#xff0c;现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的&#xff1a; 1.1Shiro支…

React相关扩展二(Fragment、Content、useContext、组件优化、render props、错误边界)(十)

系列文章目录 第一章&#xff1a;React基础知识&#xff08;React基本使用、JSX语法、React模块化与组件化&#xff09;&#xff08;一&#xff09; 第二章&#xff1a;React基础知识&#xff08;组件实例三大核心属性state、props、refs&#xff09;&#xff08;二&#xff0…

本周推荐 | AB实验低响应情景解决实践

推荐语&#xff1a;本文针对AB实验低响应情景下的增量效果不显著问题&#xff0c;提出通过倾向得分匹配方案来衡量策略增量效果的方法&#xff0c;并将相关方案融入一休平台科学评估体系中。文章理论与实践相结合&#xff0c;深入浅出&#xff0c;强烈推荐。——大淘宝技术数据…

9个非常有趣的HTML5 Canvas动画特效合集

HTML5技术正在不断的发展和更新&#xff0c;越来越多的开发者也正在加入HTML5阵营&#xff0c;甚至在移动开发上HTML5的地位也是越来越重要了。HTML5中的大部分动画都是通过Canvas实现&#xff0c;因为Canvas就像一块画布&#xff0c;我们可以通过调用脚本在Canvas上绘制任意形…

计算机视觉OpenCv学习系列:第一部分、绪论

第一部分、绪论第一节、计算机视觉发展历程1.计算机视觉发展历史2.计算机视觉的主要任务3.计算机视觉的应用场景第二节、计算机视觉框架1.早期计算机视觉框架概述2.当前主流的框架与路线3.计算机视觉框架的未来趋势第三节、OpenCV框架1.OpenCV的发展历史2.OpenCV模块架构3.Open…

深入理解Disruptor

Disruptor通过缓存行填充&#xff0c;利用CPU高速缓存&#xff0c;只是Disruptor“快”的一个因素&#xff0c;快的另一因素是“无锁”&#xff0c;尽可能发挥CPU本身的高速处理性能。 1 缓慢的锁 Disruptor作为一个高性能的生产者-消费者队列系统&#xff0c;核心就是通过Ri…

面向对象的好处

提到面向对象的好处&#xff0c;一些人脑中可能会冒出&#xff1a;封装继承多态封装 封装&#xff1a;通过类&#xff0c;为数据和方法&#xff0c;提供统一的上下文 但是&#xff0c;函数名&#xff0c;同样也可以提供上下文&#xff0c;并且可以通过一种叫柯里化的技巧&…

比特位计数[动态规划 || bitCount计数]

二进制计数前言一、二进制计数二、动态规划 & bitCount分治统计1、bitCount分治统计2、动态规划总结参考文献前言 二进制计数可以直接基于分治去快速统计&#xff0c;如果是连续数的二进制计数&#xff0c;可以利用前面已经计算出的状态进行递推求解&#xff0c;即动态规划…

Python NumPy 连接数组

前言NumPy&#xff08;Numerical Python的缩写&#xff09;是一个开源的Python科学计算库。使用NumPy&#xff0c;就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数&#xff0c;涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍Python NumPy 连接数组…

使用Java为何总写出C风格的代码?

“你看你所有代码都是把字段取出来计算&#xff0c;然后&#xff0c;再塞回去。各种不同层面的业务计算混在一起&#xff0c;将来有一点调整&#xff0c;所有代码都得跟着变。” 在实际的开发过程中&#xff0c;有不少人都这么写代码的。Java写的代码应该有Java的风格&#xf…

Karl Guttag:Quest Pro透视效果差,并不适合商用

AR/VR光学专家Karl Guttag曾指出&#xff0c;基于VST透视的AR虽然绕开了光学透视AR的一些局限&#xff0c;但VST透视依然存在运动延迟、余光视觉透视效果、分辨率、IPD不匹配等多种问题。的确&#xff0c;VST透视AR的结构、原理比光学透视AR更简单&#xff0c;但它同样需要解决…

(二十)正则表达式

目录 前言: 1.概述: 2.正则表达式体验: 3.正则表达式字符 4.正则表达式在字符串方法中的使用 5.代码演示: 6.正则表达式支持爬取信息 7.代码演示: 前言: 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regex…

SpringCloud-Netflix学习笔记05——Eureka模拟实现简单集群

前言 对于Eureka注册中心来说&#xff0c;如果只有一个注册中心的话&#xff0c;如果注册中心崩了&#xff0c;那么里面的服务全部用不了&#xff0c;系统就会崩溃。为了避免这个问题&#xff0c;我们可以搭建一个注册中心的集群&#xff0c;几个注册中心互相关联&#xff0c;如…

程序员别死背面试八股文了,这种面试题才是未来主流。。。

目录&#xff1a; 面试官为啥要出这样一个开放式问题生产消费模型及核心数据结构支撑TB级数据写入的分布式架构数据宕机场景下的高可用架构支持数据不丢失的ack机制最后的总结 1、面试官为啥要出这样一个开放式问题 这篇文章简单给大家来聊一个互联网大厂的Java面试题&#x…