C语言基础|C语言基础级——字符与字符串

C语言基础级——字符与字符串 转载请标明出处!

文章目录

  • C语言基础级——字符与字符串
    • 字符
    • 字符数组
      • 第一种
      • 第二种
      • 第三种
      • 三者区别
    • 字面量后缀
      • 定义
      • 作用

‘字符’,C语言规定字符用单引号('')作为定界符;“字符串”,C语言规定字符用双引号("")作为定界符;
字符 字符是C语言最基本的元素,C语言字符集由字母、数字、空白、标点和特殊字符组成的。%c 是字符型占位符。空白字符包括空格符、制表符和换行符。
char str = 'a'; printf("%c\n", str);

C语言基础|C语言基础级——字符与字符串
文章图片

我们再用%d整型占位符,看下结果。
char str = 'a'; printf("%d\n", str);

C语言基础|C语言基础级——字符与字符串
文章图片

%c打印出是 a 字符,%d打印出是 97,我们都是打印str里面所存放的字符,但是结果却不同。这就是通过ASCII码表与而二进制转换的标准。
'a' 对应ASCII码为 97'A' 对应ASCII码为 65'4' 对应ASCII码为 52。ASCII码表只需要记住几个常用的,不需要花太多时间背下来。ASCII码总表
字符数组 想要用多个字符组成一串,这一长串的字符我们称为字符串。
第一种
char str[] = "abc"; printf("%s\n", str);

C语言基础|C语言基础级——字符与字符串
文章图片

注意:
  • 采用字符数组存放字符串,%s能够直接输出数组当中的字符串。
  • 字符串结尾处默认添加'\0''\0'是空字符,对应ASCII码为0
第二种
char str[] = {'a', 'b', 'c', '\0'};

注意:
  • 需要我们手动添加'\0'以代表字符串终止。
  • printf函数是从首地址逐字节寻址,直到遇到'\0'后,结束寻址。
    • 若字符串'\0'不存在,可能会导致因为没有'\0'而多输出乱码或字符串。所以养成习惯,要加上'\0';
第三种
char *str = "abc";

指向字符串(abc)的指针。
注意:
  • 字符串结尾处默认添加'\0''\0'是空字符,对应ASCII码为0
三者区别
内存的存储区域不同,且作用方式、声明周期也有所不同。
  • 字符是单引号(''),字符串是双引号(""),如果字符串常量用单引号,会报错。
  • 字符存储空间个字节,而字符串存储空间是个字节。
  • 前两种并不是保存在常量区,从常量区拷贝出字符串的副本存放到数组当中,位于内存的栈区,可修改。
#includeint main() { #if 1 // 打印原来的字符串 char str[] = "hello"; printf("str[] = %s\n", str); // 打印修改后的字符串 str[0] = 'w'; printf("str[] = %s\n", str); #endif#if 0 // 打印原来的字符串 char str_1[] = {'h', 'e', 'l', 'l', 'o', '\0'}; printf("str_1[] = %s\n", str_1); // 打印修改后的字符串 str_1[0] = 'w'; printf("str_1[] = %s\n", str_1); #endif return 0; }

C语言基础|C语言基础级——字符与字符串
文章图片

  • 第三种相当于指针里存放着"abc"的地址,通过寻址方式找到"abc",无法直接通过指针修改常量区,它是只读。一旦修改,就会报段错误。
#includeint main() { // 打印原来的字符串 char *str_2 = "hello"; printf("str_1[] = %s\n", str_2); // 打印修改后的字符串 str_2[0] = 'w'; printf("str_1[] = %s\n", str_2); return 0; }

C语言基础|C语言基础级——字符与字符串
文章图片

字面量后缀 定义
实际上字符串更严谨地称为字符串字面量,例如:"hello" "Home\n"
字面量又有很多种,整型字面量、浮点型字面量、字符型字面量…
字面量后面,我们都会增加一个后缀标记类型:
  • 长整型字面量,后加一个lL,例如:1234L
    • 八进制前面加0,例如:031
    • 十六进制前面加0x0X,例如:0x330X33
  • 无符号字面量,后加一个uU,例如:123U
  • 单精度浮点型字面量,后加一个fF,例如:1.23F
  • 不增加后缀的浮点型字面量,都为双精度浮点型字面量。例如:1.23
作用
  • 在我们做数学运算过程当中,为了统一每个运算的数据类型,我们通常都会加上对应的后缀标记类型。
float sum = 2.0F * 3.0F * 4.0F;

【C语言基础|C语言基础级——字符与字符串】如果不加上,会导致计算出来的结果,精度上有误差。

    推荐阅读