网站首页 > java教程 正文
实现目的
我们在用C语言编写程序时,经常会遇到使用字符串数组的情况,这种数组的特点是, 数组中的每个元素都是一个字符串,但每个字符串的长度却不相同。如果你使用C++语言进行编程的话,实现起来相对比较简单,只需直接选择标准模板库的字符串string类,在代码中定义该类的一个数组即可实现。现在的问题是,在纯C语言中如何定义这样的一个字符串数组呢?
如对于下面的一个字符串数组:
str = {
“I love C.”,
“I love C++.”,
“I love JAVA.”,
“I love Python.”,
“I love LabVIEW.”
}
下面给出C语言中的两种定义方法。
方法1:定义一个char类型的二维数组
这种方法是通过定义一个char类型的二维数组实现,通过二维数组的行索引可得到数组中的每个字符串,列的大小限定了每个字符串所能包含的最大字符个数,所以采用这种定义方式时,列的大小必须不能小于数组所有字符串的最大长度。如对于上面的数组,C语言的定义代码如下:
在取该数组的每个字符串时,直接对行索引即可。
方法2:定义一个指向char类型的指针数组
这种方法是通过定义一个指向char类型的指针数组实现,数组中的每个元素都是一个指针,通过该指针可得到数组中的每个字符串。如对于上面的数组,C语言的定义代码如下:
两种方法对比
上面的两种方法都可以实现我们的目的,但在内存的占用上两种方法不同。第1种方法定义了一个5行20列的二维数组,即每个字符串所占的字节长度都为20个,所以共需要占用100个字节,而第2种方法是定义的指针数组,每个指针指向的字符串占用的字节长度是其实际长度,所以其总的长度肯定小于100个字节。综合来讲,第1种方法相对于第2种方法,造成了存储空间的浪费情况。
完整的测试代码
下面给出这个例子的完整的C语言测试代码,如下图所示:
程序运行结果如下图所示:
总结
一般在C语言中定义字符串的数组时,推荐使用第2种方法,特别是对于单片机、嵌入式等方面的程序开发时,可以充分利用有限的硬件资源,避免存储空间的浪费。
欢迎加关注,共同交流。
猜你喜欢
- 2024-10-11 JAVA练习题:定义一个数组,获取数组中最大最小值
- 2024-10-11 java中数组(二)(java数组的常见操作)
- 2024-10-11 灵魂拷问:Java如何获取数组和字符串的长度length还是length()?
- 2024-10-11 前后端分离文件上传系列:在安卓系统中将文件转换为字符串并上传
- 2024-10-11 java集合转换数组注意问题(javalist集合转换数组)
- 2024-10-11 尚学堂java学习笔记:数组的返回(java数组作为返回值)
- 2024-10-11 Scala:Array(集合、序列)(scala arraylist)
- 2024-10-11 Java修炼终极指南:124 将对象序列化为字节数组
- 2024-10-11 List与String相互转化的几种方式归纳
- 2024-10-11 Java将字符串解析为Json格式(java字符串解析成数组)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)