`
xitong
  • 浏览: 6190251 次
文章分类
社区版块
存档分类
最新评论

字符数组初探

 
阅读更多
字符数组非常特殊,要牢记。




字符数组既可以用一组由花括号括起来、逗号隔开的字符字面值进行初始化。
例如:char my_char1[3] = {'a', 'b', 'c'};//此时my_char1数组的维数是3。


也可以用一个字符串字面值进行初始化,注意字符串字面值包含一个额外的控制符(null)。
例如:char my_char2[4] = "abc";//此时my_char2数组的维数是4。如果写成3就错误了,忘记最后一个非显示null了。


通过以上可以知道字符串字面值的类型是字符常量的数组,即字符串字面值的类型就是const char类型的数组。
C++从C语言继承下来的一种通用结构是C风格字符串,而字符串字面值就是该类型的实例。实际上,C风格字符串既不能确切的归结为
C语言的类型,也不能归结为C++语言的类型,而是以空字符null结束的字符数组。
例如:
char my_char3[] = {'w', 'o', 'r', 'd'}; //不是C风格字符串,只是一个不含有结束符null的字符数组
char my_char4[] = {'w', 'o', 'r', 'd', '\0'}; //C风格字符串
char my_char5[] = "word"; //C风格字符串
const char *my_cp = "word";
char *my_cp1 = my_char3; //指针my_cp1指向my_char3
char *my_cp2 = my_char4; //指向数组第一个元素的指针

可以用(const)char*类型的指针来操纵C风格字符串。
例如:
const char *cp = "some value";
while (*cp) {
//do something to *cp
++cp;
}
while语句的循环条件是对const char*类型的指针cp进行解引用,直到cp指向结束字符数组的null时循环结束


C语言标准库(string.h)提供很多处理C风格字符串的库函数,要使用这些标准库函数必须包含相应的头文件,cstring是string.h的C++版本


#include <cstring>
strlen(s) 返回 s 的长度,不包括字符串结束符 null
strcmp(s1, s2) 比较两个字符串 s1 和 s2 是否相同。若 s1 与 s2 相等,返回 0;若 s1 大于 s2,返回正数;若 s1 小于 s2,则返回负数
strcat(s1, s2) 将字符串 s2 连接到 s1 后,并返回 s1
strcpy(s1, s2) 将 s2 复制给 s1,并返回 s1
strncat(s1, s2,n) 将 s2 的前 n 个字符连接到 s1 后面,并返回 s1
strncpy(s1, s2, n) 将 s2 的前 n 个字符复制给 s1,并返回 s1


注意:传递给这些标准库函数例程的指针必须具有非零值,并且指向以 null 结束的字符数组中的第一个元素。
如果必须使用 C 风格字符串,则使用标准库函数 strncat 和 strncpy 比 strcat 和 strcpy 函数更安全,使用标准库函数 strncat 和 strncpy
的诀窍在于可以适当地控制复制字符的个数。特别是在复制和串连字符串时,一定要时刻记住算上结束符 null。在定义字符串时要切记预留存放 null字符的空间


最后:
应该尽量使用标准库类型的string,对大部分应用而言,使用标准库类型 string,除了增强安全性外,效率也提高了,因此应该尽量避免使用 C 风格字符串。


------------------------------------------
char name[20] = "chenglong";
cout << name; //输出的不是字符数组的首地址,而是整个字符数组
char ch = 'z';
cout << &ch; //输出的不是字符ch的内存地址,而是z字符加上其他东西
------------------------------------------
关于上面的代码,特别的C++为了与C兼容关于字符数组做了特殊处理:
输出字符变量地址的时候,改成输出从这个内存单元开始存放的
一系列字符,到向后遇到第一个'\n'为止。


------------------------------------------
char* name[20];
cin >> name;
------------------------------------------
输入的时候从这个地址开始摆放字符最后再补上'\n'


如果想得到字符变量的地址可以这样:
------------------------------------------
cout << hex << (int)&ch << endl;
------------------------------------------








分享到:
评论

相关推荐

    matlab自学课件

    2 初探MATLAB 第二篇 绘图功能 3 二维平面绘图 4 三维立体绘图 5 特殊图形 6 图像显示与读写 7 动画制作 8 句柄图形与GUI设计 9 GUIDE:GUI设计环境 第三篇 变量与数据结构 10 矩阵的处理与运算 11 字符与字符串 12 ...

    C#开发实战宝典.(清华出版.王小科等).part1

     全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件...

    C#开发实战宝典.(清华出版.王小科等).part2

     全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件...

    IOI 2009 国家集训队论文part_2

    罗穗骞 后缀数组——处理字符串的有力工具 方展鹏 浅谈如何解决不平等博弈问题 姜碧野 SPFA算法的优化及应用 毛杰明 母函数的性质及应用 董华星 浅析字母树在信息学竞赛中的应用梅诗珂 信息学竞赛中概率问题求解初探...

    C语言入门经典(第4版)--源代码及课后练习答案

    6.3.2 字符串数组 208 6.4 字符串库函数 210 6.4.1 使用库函数复制字符串 210 6.4.2 使用库函数确定字符串的长度 211 6.4.3 使用库函数连接字符串 212 6.4.4 比较字符串 213 6.4.5 搜索字符串 216 6.5 分析...

    03《PHP学习手册》.zip

    第一篇为基础篇,包括了解PHP、着手准备开发PHP的条件、了解Web页面的设计、PHP开发基础、PHP流程控制语句、字符串操作、正则表达式、初探数组、日期和时间;第二篇为核心篇,包括文件和目录处理技术、图形图像处理...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    5.1.2 数组初探 101 5.1.3 数组——物以类聚 104 5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 一“实”多“名”的...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    5.1.2 数组初探 101 5.1.3 数组——物以类聚 104 5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 一“实”多“名”的...

    培训matlab教程

    02-初探MATLAB 03-二维平面绘图 04-三维立体绘图 05-特殊图形 06-动画制作 07-句柄式图形与GUI设计 08-句柄式图形与GUI设计 09-矩阵的处理与运算 10-字符与字符串 12-异质数组 13-结构数组 14-MATLAB 的运算 15-M...

    近年国家队论文.rar

    近年部分信息学竞赛国家集训队队员的论文 主要内容包括动态规划,数学相关和字符串相关 例如: 基于连通性状态压缩的动态规划问题_Cdq 周源 dp斜率优化 信息学竞赛中概率问题...后缀数组——处理字符串的有力工具

    c#开发实战宝典 明日科技 源代码

    全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件,...

    JAVA学习手册CHM版

    全书共20章,分为4篇进行介绍,第1篇为基础篇,包括Java开发前奏、搭建Java开发环境、 扎实Java语言基本语法、掌握算法和流程控制、使用Eclipse开发工具、探秘面向对象程序设计、初探Java数组;第2篇为核心篇,包括...

    学通C#的24堂课_清华大学出版社_高清扫描版

    主要内容包括初探C#及其开发环境、程序设计基础、程序流程控制、字符集字符串的使用、数组与集合、程序设计中的算法、面向对象程序设计、Windows窗体设计等内容。 适合有志于从事软件开发的初学者】高校计算机相关...

    MATLAB详解

    • 第1章MATLAB简介 ...• 第3章单元数组和结构 • 第4章字符串 • 第5章符号运算 • 第6章MATLAB绘图基础 • 第7章程序设计 • 第8章计算方法的MATLAB实现 • 第9章优化设计 • 第10章SIMULINK仿真初探

    2009年信息学奥林匹克中国国家国家集训队论文

    11.罗穗骞《后缀数组——处理字符串的有力工具》 12.方展鹏《浅谈如何解决不平等博弈问题》 13.姜碧野《SPFA算法的优化及应用》 14.毛杰明《母函数的性质及应用》 15.董华星《浅析字母树在信息学竞赛中的应用》 16....

    传智播客扫地僧视频讲义源码

    27_C++面向对象模型初探_传智扫地僧 28_this指针 29_作业 源码及文档 01_上一次课程回顾 02_const修饰的是谁_传智扫地僧 03_this的const修饰课堂答疑 04_全局函数pk成员函数(返回元素,引用,星号this) 05_强化...

    MQL4笔记 带常用变量、函数使用示例

    MQL4笔记 带代码示例 ...EA编程之数组函数 EA编程之图表函数 EA编程之账户函数 EA编程之字符函数 EA框架逻辑流程图 交易系统模型设计思路初探 如何怎样使用EA智能交易系统与MQ4程序语言介绍 移动止损策略与实现 .....

    IOI国家集训队论文集1999-2019

    杨 培 -《非最优化算法初探》 张 辰 -《动态规划的特点及其应用》 张 力 -《类比思想在解题中的应用》 张一飞 -《冗繁削尽留清瘦——浅谈信息的充分利用》 ## 2001 高寒蕊 -《从圆桌问题谈数据结构的综合...

    Android 开发技巧

    9.36、从输入流中获取数据并以字节数组返回 250 9.37、通过ANDROID 客户端上传数据到服务器 251 9.38、文件下载类 255 9.39、下载文件的进度条提示 263 9.40、通过HTTPCLIENT从指定SERVER获取数据 265 9.41、通过FTP...

Global site tag (gtag.js) - Google Analytics