继续将一些学习记录写下来,与大家分享。本篇日志关于二维字符数组的定义和初始化。我相信这篇文章属于菜鸟级的,高手请直接无视。

一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它。比如说:

Code:
  1. char testcase[30][MAX_LENGTH] = {"jo","vicent","tom","honey","gigi","lily","susan","peter","bob","ron",
  2. "jason","henry","kiki","ken","auscar","vivian","yiyi","peace","iron","lotus"
  3. "andy","arta","ophone","denial","pipe","wade","james","kobe","kent","angel"};

通常使用二维字符数组是为了在程序中存储一些字符串关键字。用这样的方式来初始化就最简单不过了。其中,MAX_LENGTH是所有字符串中最大的长度。当然不能忘记'/0'了。

而定义一个字符二维数组,C也提供了简洁的方式,如果我不想统计字符串的长度,我还可以这样定义:

Code:
  1. char *testcase[30] = {"jo","vicent","tom","honey","gigi","lily","susan","peter","bob","ron",
  2. "jason","henry","kiki","ken","auscar","vivian","yiyi","peace","iron","lotus"
  3. "andy","arta","ophone","denial","pipe","wade","james","kobe","kent","angel"};

也就是说,可以不再数组定义的时候指定字符串的长度,但是注意字符串的个数是一定要指定的,像这样写 char **testcase = ... 是不行的,不过肯定不行了,因为int *pt=3 也不行,呵呵,这两个例子是一个道理啊。

我觉得肯定是人都喜欢第二种初始化方法了,而且它还有一个优点,起码对喜欢用指针的同志来说是一个大优点。就是可以将这样定义的指针赋给一个二维指针,比如

char **pointer = testcase;

想形式1的定义方法肯定不能这样赋值了。

不过非常非常值得注意的是,上面定义的两个指针,一个一维,一个二维,他们必须在const关键字上一致,意思就是说如果定义testcase前面加了const关键字,定义pointer时也必须加上,否则就会报错:

error C2440: 'initializing' : cannot convert from 'char *[30]' to 'const char **

在写这篇日志的过程中,我突然想到一个问题,就似乎利用上面的方法二初始化二维字符串数组之中,字符串是如何分布的呢?因为字符串的长度是不相等的,完全由编译器来计算,那么它是会按照最长的字符串来定制字符数组的长度,还是让每一个字符串数组都按照自身的大小来占据内存,靠'/0'来识别结尾呢?

为了搞清这个问题,我又做了一些实验。有发现了一些有趣的东西。不过还是另起一文吧。请见:http://student.csdn.net/space.php?uid=37718&do=blog&id=3607

C语言中二维字符数组的定义和初始化相关推荐

  1. c语言中定义字母二维数组,C语言中二维字符数组

    C语言中二维字符数组的定义和初始化 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: Code: 1.char testcase[30][MAX_LENG ...

  2. C语言二维字符数组详解

    二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串. 二维字符数组的定义 二维字符数组的定义格式为: char 数组名[第一维大小][第二维大小]; 如: char ...

  3. python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...

    字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...

  4. C语言字符数组的定义与初始化

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  5. C 语言字符数组的定义与初始化

    点击打开链接 1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p' ...

  6. 字符数组的定义和初始化

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I','','a','m','','h','a','p','p','y'} ...

  7. C语言二维字符数组的输入

    标题 C语言字符数组的输入输出 定义一个字符二维数组,输入行数n,与列数m #include <stdio.h> #include <math.h> int main() {i ...

  8. c语言动态的申请矩阵存储空间,C语言中二维数组如何申请动态分配内存

    C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include #include int main() { int **a; int i ...

  9. c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

    C语言中二维字符数组应该怎样赋值? c语言二维数组如何定义字符串????急... 二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小]; 例如:char c[3][10]; //定义 ...

最新文章

  1. Hadoop系列六:Hadoop之HBase篇
  2. Linux/windows系统定时任务调度总结
  3. 列表推导式与生成表达式的区别
  4. 华为Mate 30系列发布日期、地点再曝光:9月19日 慕尼黑见?
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校学习智能管理论坛系统
  6. JS如何关闭当前浏览器窗口?
  7. jpa 人大金仓数据库方言_生态丨参展CITE2020 人大金仓全栈数据库管理系统强势来袭!...
  8. Javascript第六章基本包装类型第八课
  9. python 模拟键盘_Python模拟键盘输入和鼠标操作
  10. 4、线程--线程同部
  11. C#获取程序运行时间
  12. MTK modem编译
  13. CSS border dashed 虚线调整
  14. uniapp 引入第三方包发起网络数据请求
  15. 外卖行业现状分析_简要分析外卖运营行业的发展现状
  16. 解决QQ群文件未通过安全检测无法下载问题
  17. TSL 传输层安全性协议
  18. 学渣!面对疾风吧!哈撒给
  19. android中edittext属性
  20. 一个专业的地图制作网站,怎么自己制作地图?

热门文章

  1. python_matplotlib分别使用plot()和scatter()画散点图,以及如何改变点的大小
  2. Android Studio使用签名打包发布APP(安卓生成apk文件)
  3. 【高等数学】函数连续、可导、可微,洛必达法则使用条件、一阶可导、一阶连续可导、二阶可导、二阶连续可导
  4. 1.3 nest.js使用supertest单元测试及e2e测试
  5. position:sticky 粘性定位 (sticky) 与 固定定位
  6. 3.神经网络-深度学习入门
  7. python短路逻辑特性,使用Python三目计算符的用法及短路逻辑方法介绍
  8. SyntaxError: Non-UTF-8 code starting with '\xca' in file main.py on line 3, but no encoding declared
  9. 机制检验、异质性检验、调节效应
  10. 荣耀十连续点击android版本9,华为荣耀V10开发者选项如何设置