初步认识c语言:字符串,转义字符。

目录

字符串的赋值

   第一种整体赋值:

   第二种单个元素赋值:

   第三种指针法:

  输出的形式:

 常见转义字符:

它们具体的使用方法:

?

\`

\"

\\

\a

\ddd

\xdd

注意:以上用法为常用转义符,没有全列出


字符串的赋值


  字符串的初始赋值两种:


   第一种整体赋值:

char  a[]={"good morning"};//因为保存的是字符型的变量所以数组用char来定义;
char  b[]="good morning";//可以不加{}
    


    
这种形式会在最后一个字符的末尾加'\0',是以'\0'结尾的;

如果定义的字符长度小于数组的下标,则其他元素自动为'\0';

空格也算一个字符;

如果用这种方法来定义字符串,则定义的字符个数要少数组的下标,因为在末尾会自动加'\0';(当然'\0',也是会占一个字符的位置;'\0'为转义字符 null(空))

       编译器会在末尾自动添加'\0'是为了清楚,该字符串是在那里结束。'\0'作为字符串结束的标志。(具体为什么下面的多维数组讲解)

           注:空格和'\0',并不是同一个东西。空格是字符;ASCII码是32,而'\0'是转义字符;ASCII码是0

   第二种单个元素赋值:

char a[]={'g','o','o','d'};//这种形式必须带花括号{};

char a[]={'g','o','o','d'};//这种形式必须带花括号{};
这种形式末尾是没有'\0';的,相当于对数组中的每一个元素进行赋值。

能定义的字符个数就等于数组的下标值;(这种形式更准确的来说应该叫字符数组)

   第三种指针法:

char *p="hello";//定义一个指针指向一个字符串;
printf("%s",p);//输出字符串;
printf("%c",*(p+i));//单个字符输出;


指针p指向字符串的首地址,如果需要调用可以*(p+i)这种形式取其中的元素;或直接p输出这个字符串;

     

  输出的形式:

     1.在图1arr1变量等号后字符串\0结尾的存在(程序中省略)向内存申请6+1空间,但\0不算作字符串内容。

   2.在arr2变量中由于等号后不为字符串,所以必须在'f'后添加'\0'字符,否则将无结束标志,会有乱码

 此图图1修正后,则乱码不会存在。

 若使用strlen操作符计算其字符串长度则\0不算

注:使用strlen时比必须在程序前加上#include<string.h>

 常见转义字符:

转义字符 释义
? 在书写连续多个问号时使用,防止他们被解析成三字母词
\` 常见用于表示字符常量
\" 用于表示一个字符产内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。如:\130X
\xdd dd表示2个十六进制数字。如:\x30 0

它们具体的使用方法:

  • ?

在某些编译器下 ,会将 “ ??) ” 解析成 三字母词 “ ] ” ,
所以在打印 “ ??) ”时,为了防止被解析成三字母词,在它前面加 " \",改成 ” \??) “ 。

  • \`

像这样打印单引号时会造成编译器无法编译

printf("%c",''');

在 ’ 前面加 \ 将它转义就可以打印出来了,

printf( "%c",' \' ');

  • \"

与 \` 用法相同,这里就不再赘述了。

  • \\

用来表示一个反斜杠,防止它被解释为一个转义

当你想打印一个文件路径时,如果直接这样写:

printf("c:\test\test.c");

那打印出来的结果将是这样的:

 这是因为 \t 会被编译器解析为水平制表符,

正确的写法是在 \ 的前面加 \ 进行转义, 防止被解析为 \t,

printf("c:\\test\\test.c");

  • \a

在打印 \a 时触发电脑上的蜂鸣器.。

printf("\a");
  • \ddd

ddd表示1-3个八进制的数字。将ddd三个数字转换成十进制,十进制数对应的ASCAII就是结果。

猜一猜下面的代码打印出的是什么?

printf("%c",'\130');

因为输出结果为字符型,将八进制数字130转换为十进制为88,然后输出对应ASCII码表的字符X。

如果输出类型为整型,打印的结果就是八进制130转换为十进制的结果

像这样:

printf("%d",'\130');

最后结果为88,正好对应ASCII表中的X

注意:超过了ascall码的范围,编译器就会报错。另外大于三位,或者遇到非八进制数字时则转换结束,直接取末尾数字。

  • \xdd

同样首先要了解的是dd表示2个十六进制数,

猜一猜下面的代码打印出的是什么?

printf("%c",'\x30');

为什么是0呢?

因为输出结果为字符型,将十六进制数字30转换为十进制为48,然后输出在ASCII表中对应的字符 0。

同样的,如果输出类型为整型,打印的结果就是十六进制30转换为十进制的结果

printf("%d",'\x30');

最后结果为48对应ASCII表中的0

注意:以上用法为常用转义符,没有全列出

后续会更新.......

猜你喜欢

转载自blog.csdn.net/fcccfffg/article/details/131987646