打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c语言 如何用指针来处理字符串?

读者,你好!
如果你精通C,希望能得到你的斧正;如果你是初学者,希望能对你有所帮助。
加粗的是一些我认为比较重要的内容。

一、字符指针

1、字符指针输出字符串

为了更好的理解这部分内容,我们先看一个例子:

#include <stdio.h>int main(){    char *ps ;    ps = "C language!";     /*定义字符指针*/    printf("%s\n", ps);  /*用字符指针PS来输出字符串的内容*/      return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行结果为:


这个列子中,字符串“C language!”, 存储在连续的无名存储区中,通过语句ps = "C language!, 将无名储存区的首地址赋给指针ps,也就是说,指针变量ps 指向无名储存区域的首地址,而不是把无名储存区域的内容保存在ps中,

C l a n g u a g e ! \0

ps^

2、字符指针处理字符串

还是从具体的列子出发:

#include <stdio.h>int main(){    char *ps = "C language!";    int n = 2;    ps = ps+2;      /*移动指针ps*/     printf("%s\n", ps);    return 0;   } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果:

这里初始化的时候把首地址赋给了ps , 后面操作ps= ps+2时,ps指向l 所在的空间。

3、字符数组与字符指针处理字符串有何不同

  • 占用空间不同。数组所占空间取决于数组的长度,而指针只占用4字节,用以存放字符串的首地址。
  • 赋值方式不同指针本身是变量,所以可以这样char *ps; ps = "C language!"; 赋值, 而数组不能这样char A[20];A = "C language!;赋值,而要逐个赋值。

二、指针数组

    指针数组的说明形式

语法 类型标识符 *数组名[整形常量表达式];
样列 int *p[3];
说明 “int *p[3];”表示p是一个指针数组名,他有三个元素p[0],p1],p[2],每个元素都是一个指针,而这些指针都指向整形变量。

注意不要写成int (*p)[3]; 这是上一篇说的指向数组的指针变量,表示长度为3的指向一维数组的指针变量。

  • 指针数组比较适合于用来指向若干个字符串,是字符串处理更加灵活方便。

  • 比如图书馆有若干本书,要将这些书名存在一个数组中,一般的方法用二维数组来存,就得定义该字符数组的列数为最长书名的长度,这样就非常浪费空间。

  • 用指针数组则可以让指针数组中的各个元素,指向各字符串(书名),这样排序时,不必改动字符串的位置,而是改动指针数组中个元素的指向。
  • 这样,各字符串的元素可以不同,而且移动指针变量的值(地址),就比移动字符串所花的时间少得多。
#include <stdio.h>#include <string.h>#define N 5int main(){    char *name[N] = {"Data Structure", "Programming C", "Java", "Operating System", "Data base"};    char *temp;    int i, j, front;    for(i = 0; i < N -1;i++)    {        front = i;           //假设按字典顺序,第i个书名应位于前        for(j= i + 1;j < N;j++)        {            if(strcmp(name[front], name[j]) > 0)//判断其先后顺序是否合理            {                front = j;            }        }        if(front != i) //若顺序不合理,也就是原先的假设不成立,交换指针的值(地址)        {            temp = name[front];            name[front] = name[i];            name[i] = temp;        }    }    for(i= 0;i<N;i++)    {        printf("%s\n", name[i]);    }    return 0 ;} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行结果:


这段算法,后面部分与一般的数组差不多,但其效率却比较高。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
字符指针、字符数组用法大总结(字符串处理)
指针
C语言学习教程第六章-指针(5)
12 c语言多维数组的指针变量 - 中安网培 - 黑客培训,安全培训门户网站
多维数组的指针变量
《C语言程序设计教程》第八章指针
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服