您的位置:首页 > 其它

字符数组和字符串总结

2016-12-17 15:24 127 查看
一.字符数组 :
 1.初始化
  1.动态初始化 : arr[n1] = x; arr[n2] = x; .... arr
= x;  n <= length
    1.n = length --- 动态完全初始化
    2.n < length --- 动态部分初始化
     *未初始化元素,对应内存空间存放垃圾值
  2.静态初始化 : char name[length] = {e1, e2, e3, ......... eN};  n <= length
    1.n = length --- 静态完全初始化
    2.n < length --- 静态部分初始化
     *未初始化元素由系统自动默认初始化 --- 使用对应数据类型默认值初始化
     *利用编译器这一特点,可以很方便的把所有元素置为空字符
     	    char arr[10] = {0}; --- 第一个元素手动初始化为字符0即空null,因为是静态部分初始化所以剩余元素,系统自动默认初始化 --- 字符默认值是空字符'\0'即空null

*字符0对应的十进制是十进制0,当以十进制格式化输出时,输出值为0

  3.自动识别长度的静态完全初始化 : char arr[] = {1, 2, 3, 4);
  4.引入字符串概念后,字符数组又多了一种初始化方式
   1.为便于用字符数组存储和处理字符串,C允许直接用字符串常量初始化数组
    1.指定长度
     1.char c[6] = {"hello"};
     2.char c[6] = "hello";
    2.自动识别长度
     1.char c[] = {"hello"};
     2.char c[] = "hello";
 2.在gcc编译器下测试可知
  1.字符型默认值为空字符'\0',对应ASCII码为0 
二.字符串
 0.字符数组和字符串
  1.相同点
   1.都是内存中一段连续的char空间
   2.字符数组没有结束标识符,字符串有结束标识符
   3.当以字符数组表示和存储字符串时,必须把结束标识符'\0'也存入字符数组
    *此时的字符数组从内存来看,实际上就是一个字符串
    *若不存字符串结束标识符'\0',只是一个字符数组,不是字符串
 1.字符串 --- 以双引号定界 且 以空字符'\0'标识结束
 2.C语言中有字符串概念,但没有字符串这种数据类型,因而通常需要借助字符数组来存储和处理字符串
  1.当把一个字符串存入一个字符数组时,也把标识结束的字符’\0’存入数组,因此该字符数组的长度是字符串实际字符数+1
   eg : 字符串 "hello"
    char c[6] {1, 2, 3, 4, 5, '\0'};
 3.为便于用字符数组存储和处理字符串,C允许直接用字符串常量初始化数组 --- 对于字符数组来说,有多了一种初始化方式
  1.指定长度
   1.char c[6] = {"hello"};
   2.char c[6] = "hello";
  2.自动识别长度
   1.char c[] = {"hello"};
   2.char c[] = "hello";
 4.获取字符串长度
  字符串 : "hello"
  字符数组 : char s[10] = "hello";
  1.sizeof运算符 : --- 获取的是被获取对象在内存中的大小,以字节为单位 --- 因为C中字符占1字节,因而获取的大小即为字符数组长度
   1.获取字符串大小 sizeof("hello")
   2.获取字符数组大小 : sizeof(s);
  2.函数strlen(); --- 获取字符串所占内存的有效字节数
   1.获取字符串长度
   2.获取字符数组长度 --- 前提 : 该数组正确存储了字符串,即存入了结束标识符'\0'
    *函数strlen()获取字符串 或 正确存储字符串的数组的长度实际上是对数组或字符数组的遍历 --- '\0'为结束条件
     *获取字符数组 char arr[5] = {'a', 'b', '\0', 'c', '\0'};
      strlen(arr) = 2
      从内存来看,该数组可以表示两个字符串 : "abc\0" 和 "c\0"

5.总结 :
  1.C中的字符串本质是以'\0'作为结束标识符的字符数组
   char arr[5] = {'a', 'b', 'c', '\0', 'd'};
   char arr2[5] = {'a', 'b', 'b'};
   printf("%s", arr); //abc
   printf("%s", arr2); //abc + 垃圾值 --- 字符串以'\0'作为结束标识符,当找不到时会在对应内存区域继续往后查找,直到遇到'\0',因而会读取到垃圾值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: