技术干货第一时间送达!

往期推荐

前面两篇文章分别介绍了和,今天我们一起看看字符数组

字符数组

字符数组顾名思义就是数组的元素类型为字符型的数组。特殊之处在于它是数组元素为字符的数组。其定义的一般形式和注意事项与之前讲解的一般数组类似,只是其中的类型说明符是char。当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节的大小,使用long型和int型来定义字符数组会造成资源的浪费,因此一般选择使用char型来定义字符数组。

一维字符数组

首先通过下面一段代码来看看一维字符数组的定义。

#include#define SIZE 20int main(){long arr1[SIZE] = {'h','e','l','l','o',' ','w','o','r','l','d','!'};char arr2[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };printf("long型字符数组占用的内存大小为:%d\n", sizeof(arr1));printf("char型字符数组占用的内存大小为:%d\n", sizeof(arr2));return 0;}

运行结果:

在上面的代码中定义了不同类型的字符数组来存放相同的字符,可以看出,它们占用的内存大小相差很大,long型字符数组所占用内存大小是char型数组占用内存大小的4倍。从这点可以看出,选用char型作为数组类型避免了内存空间的浪费。下面通过一段代码来了解字符数组的初始化特点。

#include#define SIZE 20int main(){int i;char arr[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };for (i = 0; i < SIZE; i++){printf("%c", arr[i]);}return 0;}

运行结果:

运行结果为“Hello World!”,其中有一些空字符。看看上面代码中定义的arr数组,其数组长度为20,而初始化的字符元素的个数为12,初始化的字符元素个数小于数组长度,编译器在编译过程中将后面没有初始化的数组元素赋值为‘\0’,这也正是打印输出中含有空字符的原因。在打印的时候也可以将数组中的元素‘\0’视为数组结束的标志,例如:

#include#define SIZE 20int main(){int i;long arr[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };for (i = 0; arr[i]!='\0'; i++){printf("%c", arr[i]);}return 0;}

运行结果:

这时的输出结果中就不含有任何空字符了,因为巧妙地使用了字符数组中的‘\0’标志。当然,也可以采用字符串常量的方式来对一维字符数组进行初始化,例如:

#include#define SIZE 20int main(){int i;char arr[SIZE] = { "hello world!" };for (i = 0; arr[i] != '\0'; i++){printf("%c", arr[i]);}return 0;}

运行结果:

在对一维字符数组进行定义和初始化的过程中,可以不指定其长度。使用字符常量列表和字符串常量的方式进行初始化的结果是不同的,例如:

#includeint main(){int i;char arr1[] = { "hello world!" };char arr2[] = {'h','e','l','l','o',' ','w','o','r','l','d','!'};printf("采用字符串常量进行初始化的arr1数组的长度为:%d\n", sizeof(arr1));printf("采用字符常量列表进行初始化的arr2数组的长度为:%d\n", sizeof(arr2));return 0;}

运行结果:

从运行结果发现,采用这两种方式得到的数组长度并不相同,在采用字符串常量对字符数组进行初始化的过程中,在内存中进行存储时会自动在字符串的后面添加一个结束符‘\0’,所以得到的字符数组长度是字符串常量的长度加1;而采用字符常量列表的方式对字符数组进行初始化就不会在最后添加一个结束符,所以利用这种方式定义的字符数组的长度就是字符常量列表中字符的个数。

【END】

如果您觉得本篇文章对您有帮助请转发给更多的人

顺手点一下“在看”也是对小编最大的支持

C语言自定义中文字符数组,C语言数组——字符数组相关推荐

  1. C语言自定义数据类型(二)使用结构体数组

    一个结构体变量中可以存放一组有关联的数据(如一个学生的学号.姓名.成绩等数据).如果有 10 个学生的数据需要参加运算,显然应该用数组,这就是结构体数组.结构体数组与以前介绍过的数值型数组的不同之处在 ...

  2. c语言自定义的结构体,c语言定义多个结构体

    本文收集整理关于c语言定义多个结构体的相关议题,使用内容导航快速到达. 内容导航: Q1:C语言中定义一个结构体如何在不同的.C文件中使用. #include 然后就用啊 正式一点的,可以声明 ext ...

  3. c语言自定义函写计算器,C语言实现计算器功能

    <C语言实现计算器功能>由会员分享,可在线阅读,更多相关<C语言实现计算器功能(11页珍藏版)>请在人人文库网上搜索. 1.实验1多功能计算机一.问题的说明设计一台能完成基本计 ...

  4. c语言自定义double函数例子,C语言的那些事——sqrt()函数 跟 double型数据的“%lf”...

    C语言的那些事--sqrt()函数 和 double型数据的"%lf" 计算函数y=2*x^2中的x的值.计算x的值. 原本这是一道很简单的编程题目,但是对sqrt()函数以及do ...

  5. c语言自定义输出小数点位数_c语言double类型默认输出小数几位

    C语言中常用的小数有两种类型,分别是 float 或 double:float 称为单精度浮点型,double 称为双精度浮点型.不像整数,小数没有那么多幺蛾子,小数的长度是固定的,float 始终占 ...

  6. c语言自定义输出小数点位数_C语言如何控制输出数字的有效位数?

    展开全部 只需要在输出的最后添加上printf函数就可以了: double 型数据:printf("%.5lf\n",a); float 型数据: printf("%.5 ...

  7. c语言自定义输出小数点位数_C语言中输出时怎样控制小数点后的位数,请举例说明......

    控制2113小数位数就是通过输出格式说明符来规定的 举例5261说明如下4102: 1.float f1=3.1415926; 2.float f2=1234.1415926; 3.float f3= ...

  8. c++ 把数字和中文字符分开_C语言中的字符常量与变量

    字符常量与变量   在这一节中,我们来讨论字符与字符串. 1. 字符常量   如果我想在屏幕上打印"HelloWorld".应该怎样做呢?大家应该很熟悉这个代码了. #includ ...

  9. C++接收字符串数组_电脑编程 你该知道的字符知识 C语言程序设计字符数组全归纳...

    怎么定义字符数组 C语言中没有字符串类型,也没有字符串变量,字符串是存放在字符型数组中的.用来存放字符数据的数组时字符数组.在字符数组中的一个元素内存放一个字符. 定义字符数组的方法与定义数值型数值的 ...

  10. C语言之字符串探究(一):字符串与字符数组

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

最新文章

  1. 指定ASP .NET Core Web应用端口
  2. NLP汉语自然语言处理入门基础知识介绍
  3. linux apache 文件服务器,Linux下搭建Apache服务器全过程详解
  4. VC防止程序被多次运行 互斥体方法
  5. PHP中调用SVN命令更新网站方法(解决文件名包含中文更新失败的问题)
  6. hdu1261 JAVA
  7. HTML制作搞笑照片,40张创意搞笑的照片PS效果
  8. vuejs单文件组件:安装 webpack 和 vue-cli
  9. golang 所有进程休眠_Golang-进程无故消失?
  10. Blockchain.com,Eden Block,DACM等知名公司加入Pocket生态
  11. 誰毀了全新Vista電腦﹖
  12. 研究svg编辑器过程中遇到的问题总结
  13. Java对象转换Map(工具类)
  14. WebService wsdl wsimport
  15. 特来电支付中心总体介绍
  16. Linux服务器密码过期了怎么办?Linux服务器如何设置密码永不过期?
  17. B站视频下载:如何下载B站视频到电脑上
  18. 学习dicom没什么窍门
  19. 阿里云安全中心之漏洞修复最佳实践
  20. 【工业互联网】一文读懂SAP Leonardo物联网平台

热门文章

  1. 【测试】史上最详细的测试用例设计方法讲解
  2. IntelliJ IDEA教程()ideaIU-快速创建测试用例
  3. 棋牌游戏开发教程系列:游戏服务器框架搭建
  4. SpringCloudOAuth2之验证资源服务器的配置
  5. suitecrm 如何backup and restore ,从一个server 转移到另一个 server . 并保证customer package , customer module 不丢...
  6. C#使用Socket实现一个socket服务器与多个socket客户端通信
  7. 基础电路设计知识:电阻、电容、电感、二极管、三极管、mos管!
  8. 微信小程序选项卡切换
  9. 黑马Java笔记第一讲—java基础
  10. 大学计算机基础知识课本,大学计算机基础 教材简介