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

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

转载请标明出处!

文章目录

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

‘字符’,C语言规定字符用单引号('')作为定界符;“字符串”,C语言规定字符用双引号("")作为定界符;

字符

字符是C语言最基本的元素,C语言字符集由字母、数字、空白、标点和特殊字符组成的。%c 是字符型占位符。空白字符包括空格符、制表符和换行符。

char str = 'a';
printf("%c\n", str);

在这里插入图片描述

我们再用%d整型占位符,看下结果。

char str = 'a';
printf("%d\n", str);

在这里插入图片描述

%c打印出是 a 字符,%d打印出是 97,我们都是打印str里面所存放的字符,但是结果却不同。这就是通过ASCII码表与而二进制转换的标准。

'a' 对应ASCII码为 97'A' 对应ASCII码为 65'4' 对应ASCII码为 52。ASCII码表只需要记住几个常用的,不需要花太多时间背下来。ASCII码总表

字符数组

想要用多个字符组成一串,这一长串的字符我们称为字符串。

第一种

char str[] = "abc";
printf("%s\n", str);

在这里插入图片描述

注意:

  • 采用字符数组存放字符串,%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

三者区别

内存的存储区域不同,且作用方式、声明周期也有所不同。

  • 字符是单引号(''),字符串是双引号(""),如果字符串常量用单引号,会报错。
  • 字符存储空间个字节,而字符串存储空间是个字节。
  • 前两种并不是保存在常量区,从常量区拷贝出字符串的副本存放到数组当中,位于内存的栈区,可修改
#include

int 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;
}

在这里插入图片描述

  • 第三种相当于指针里存放着"abc"的地址,通过寻址方式找到"abc",无法直接通过指针修改常量区,它是只读。一旦修改,就会报段错误。
#include

int 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;
}

在这里插入图片描述

字面量后缀

定义

实际上字符串更严谨地称为字符串字面量,例如:"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语言基础,字符串)