C语言学习之七——指针_3_字符串

!!!注意:因为简书的显示格式缘故,所以“ * ”显示会出现问题,可能有些星号由于疏忽未改动格式,造成没有显示,请多多包含,如有错误,请留言或联系本人更正,谢谢!

  1. 字符串与指针
    字符串的存储形式:
    1)数组可以用来存放字符串,见例1

//例1
/#include<stdio.h>

void main()
{
char a[] = "I love UNSW!";
printf("%s", a);
}
输出:I love China!
(注:这里的存储方式是,每个数组元素空间内存储一个字符,并以”\0”结束,即这个字符串共占据13个数组单元)


字符串在数组中的存储方式

2)用字符指针指向一个字符串,见例2

//例2
/#include<stdio.h>

void main()
{
char *a = "I love UNSW!";
printf("%s\n", a);
}
//输出:I love UNSW!
(注:这里的a是一个指针变量,它存储的是字符串"I love UNSW!"的首地址,当调用a时,自动指向字符串"I love UNSW!"的首地址,然后执行后续操作)

  1. 字符串中字符的存取方法
    对字符串中字符的存取,可以用下标方法,也可以用指针方法:
    1)下标法,见例3

//例3
/#include<stdio.h>
void main()
{
char a[] = "This summer holiday will be very interesting!", b[50];
int i;
for (i = 0; *(a + i) != '\0'; i++)
{
b[i] = *(a + i);
}
printf("%s\n", b);
}
//输出:This summer holiday will be very interesting!

2)指针法,见例4

//例4
/#include <stdio.h>

void main()
{
char a[] = "This summer holiday will be very interesting!", b[50], *p1, *p2;
p1 = a;
p2 = b;
for( ; *p1 != '\0'; p1++, p2++)
{
*p2 = *p1;
}
*p2 = '\0';
printf("String a is: %s\n", a);
printf("String b is: %d\n", b);
}
//输出:String a is: This summer holiday will be very interesting!
String b is: This summer holiday will be very interesting!

(需要注意,这里的存储都是将字符串存储在数组中,即使,例4使用了指针法,但是实质的数据复制存储还是发生在数组单元中的,因为指针变量只能存放地址,即它只是个向导而不是帐篷。这里的帐篷是每个数组存储单元。当然我们也可以不要向导(即指针),如例3,我们只需要有一张地图(即数组的下标可以确定每一个数组单元)和一个起始点(即数组的首地址),然后按照起始点找到下一个帐篷,并把东西(数据)存放进帐篷即可)。

  1. 字符指针变量和字符数组的区别
    3.1虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈。
    主要概括起来有以下几点:
    1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。
    2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
    char str[20];
    str = "I love UNSW!"; (而应,char str[20] = "I love UNSW!";)
    而对字符指针变量,可以采用下面方法赋值:
    char *a;
    a = "I love UNSW!";
    (注意:赋给a的不是字符,而是字符串第一个元素的地址。)
    3)对字符指针变量赋初值:
    char *a=′′I love Fishc.com!′′;
    等价于
    char *a;
    a="I love UNSW!";
    而对数组的初始化:
    char str[20]={"I love UNSW!"};
    不能等价于
    char str[20];
    str[ ]="I love UNSW!";
    4)如果定义了一个字符数组,在编译时为它分配内存单元,内存单元内可以存放数据,并且这些内存单元有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,内存中可以放一个字符变量的地址(即指针)。由此可得,字符数组内存单元存放的是字符数据,而字符指针变量内存放的是字符的地址。
    5)指针变量的值是可以改变的,即指针变量指向的地址是可以改变的,见例5

//例5
/#include <stdio.h>

void main()
{
char *a = "I love UNSW!";
printf("%s\n", a);

a += 7;
printf("%s\n", a);
}
//输出:UNSW!

3.2若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。见例6.

//例6
/#include <stdio.h>
void main()
{
char *a = "I love UNSW!";
int i;
printf("The sixth character is %c\n", a[5]);
}
//输出:The sixth character is e (注:这里下标为5即为数组中第六个元素,因为数组序列是以0开始)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,432评论 3 44
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 3,912评论 2 13
  • 第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 10,649评论 3 71
  • 1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧...
    金巴多阅读 1,754评论 0 9
  • 今天,5月20日,谐音我爱你。朋友圈又开始了晒礼物,秀恩爱的节奏。不过这一天,对于我,有特别的意义。 多年以前的今...
    萧澄阅读 276评论 0 2