【C语言】初识C语言(上篇)2

简介: 【C语言】初识C语言(上篇)

4. 字符串+转义字符


4.1 字符


我们在键盘上敲出来的所有东西都可以理解为字符,字符一般用单引号' '来表示。


字符的使用

1. #include<stdio.h>
2. int main()
3. {
4.     char ch = 'a';
5.     ch = 'x';
6.     printf("%c", ch);
7.     return 0;
8. }


字符的本质:ASCII码值



ASCII码值小科普


计算机中存储,表示都是二进制的,早期科学家们,为了区别字符,给每个字符都编了号,这个编码就称为ASCII码值。


image.png


Tips:常见的一些ASCII码值我们可以把它背下来,如0 - 48,a - 97, A - 65等等....



4.2 字符串


字符串是什么


这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。("hello anduin.\n","a"," "这些都是字符串)。


注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。


字符串的使用

1. #include<stdio.h>
2. int main()
3. {
4. char arr[] = "abcd";
5. printf("%s\n",arr);
6. return 0;
7. }


隐藏的' \0 '

1. #include<stdio.h>
2. int main()
3. {
4.      char arr1[] = "abcd";//此处可以结合内存来说明
5.      char arr2[] = {'a', 'b', 'c', 'd'};  
6.      return 0;
7. }


接下来我们启动调试,查看arr1,arr2的内容。

65f81dad7df345db80c6b28600775ebf.png


在arr1的结尾处隐藏着一个'\0'作为结束字符串的标志,但是arr2中却没有' \0 '。


' \0 ' 的威力


别看上述例子只是少了一个' \0 ',在这里' \0 '并不是摆设,它也是有自己的“威力”的。

在我们用代码看它的作用之前让我们先了解一下strlen函数。


   strlen是一个库函数,在使用时需要引用头文件#include<string.h>


   函数作用:用来求字符串长度。


#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[] = "abcd";
    char arr2[] = {'a','b','c','d'};
    printf("%d\n",strlen(arr1));
    printf("%d\n",strlen(arr2));//可以画图详细讲解
}


这里的输出结果是什么???让我们开始运行,我们看到结果如下:

e2e480f40ef44c8995e68003bc7bba51.png


   我们不禁产生疑问,34是哪来的?原来这都是'\0'一手导致的。


   分析:’\0'仅仅是字符串结束的标志,在统计长度时,并不会加上\0一起计算


   故输出arr1的长度为4,由于arr2中没有\0,在求字符串由于\0并没有出现,所以便一直向后计算,直到遇到\0,这里面的长度也是包含了我们之前出现的烫烫烫的个数的!!!


   所以'\0'的威力还是很大的。


ad799d484168435abb9bd6be07b79761.png

小思考


如何输出这个路径?D:\Anduin_code\anduins-code-warehouse

这样可以吗?

int main()
{
    printf("D:\Anduin_code\anduins-code-warehouse");
    //输出结果:D:Anduin_codenduins-code-warehouse
}


但当我们运行之后,发现我们并不能输出我们的路径,这是为什么?因为这里\和其他字符构成转义字符。



4.3 转义字符


转义字符,通俗点来讲就是在所有ASCII码前都可以用\加数字来表示,如\0,\t,\n等等,都可以被称作为转义字符。转义字符顾名思义就是转变意思。


下面我列出了一些转义字符:

转义字符

释义

\?

在书写连续多个问号时使用,防止他们被解析成三字母词

\'

用于表达字符常量

\"

用于表示一个字符串内部的双引号

\\

用于表示一个反斜杠,防止他被解释为一个转义序列符

\a

警告字符,蜂鸣

\b

退格符

\f

进纸符

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\ddd

ddd表示1 - 3个八进制数字。如:\130x

\xdd

dd表示2个十六进制数字。如:\x30 0



让我们用代码了解他们都是什么作用(详情见注释):

int main()
{
    printf("%s\n","(are you ok??)");//在老编译器上会打印(are you ok]
    //三字母词:??) ->]
    printf("%c\n",'\'');//输出结果为:'
    printf("%c\n","\"");//输出结果为:"
    printf("\a\a\a");//蜂鸣,电脑叫三声
    char a[] = "abc";
    printf("%c%c\b%c", a[0], a[1], a[2]);//输出结果为:ac(\b为退格符,b被删掉)
    printf("1\t23");//输出结果为:1    23(\t是水平制表符,八个空格)
    printf("anudin\n");//输出结果为:anduin且换行
    printf("%c\n",'\130');//输出结果为:X (1*64+3*8+0*1 = 88 也就是字符 X)
    printf("%c\n",'\x30');//输出结果为:0 (3*16+0*1 = 48 也就是字符 0)
}



小测验


看到这儿大家应该对转义字符有一定的理解了,接下来就用几道题目来测验一下自己吧:


题1:如何正确输出代码路径:D:\Anduin_code\anduins-code-warehouse?

题2:这个路径的长度是多少?

#include<stdio.h>
int main()
{
     printf("D:\\Anduin_code\\anduins-code-warehouse?");
     printf("%d\n",strlen("D:\Anduin_code\anduins-code-warehouse"));
     return 0;
}

揭晓答案:ecc963f504974a128bc88ee9e6afe91c.png



5. 注释


注释的作用


1)代码中不需要的代码可以直接删除,也可以注释掉。


2)代码中代码比较难懂,可以加注释文字。



注释风格

1. #include<stdio.h>
2. int main()
3. {
4. //printf("hello anduin\n");C++注释风格 推荐
5. /* C语言风格注释 不推荐
6.     printf("oops!\n");
7.     */
8. }



C语言注释风格由于\*总是和更近的*/进行匹配,从而导致无法嵌套注释,所以我们一般还是用C++风格的注释。



6.选择语句


我们的生活处处都有选择,在C语言中也不例外,存在着选择语句。

举一个比较简单的例子:如果你坚持好好学习,那么以后可能会收获一份好offer。

但是如果你不好好学习,那你可能会被社会淘汰。



代码演示:

int main()
{
    int studying = 0;
    printf("你会坚持每天学习吗?(1 or 0):>");
    scanf("%d",&studying);
    if(studying == 1)
    {
        printf("好offer在等着你!\n");    
    }
    else
    {
        printf("竹篮打水一场空!\n");    
    }

对于你,你会怎么选择呢?是选择1 好offer,还是选择 0 竹篮打水一场空呢?


anduin这里还是建议大家努力起来,一起加油!


当然分支语句可不仅仅是这么点,我们今天只是了解,等之后会我会重新整理的。




7.循环语句


有些事必须一直做,比如我们日复一日的学习敲代码。


这也就形成了一种循环,C语言中有一种语句叫做循环语句,我们接下来就来了解一下它,循环语句分为三种:


  • while语句
  • for语句
  • do...while语句



我们今天就重点看一下while语句,其他两种循环语句,我会在以后详细讲解:

while(表达式)

       循环语句;



我们可以通过一个例子来了解一下while语句是如何进行的,比如你坚持写代码,当你代码写到两万行时,你可能觉得你的水平差不多了,也可以找个offer了,那么这个循环也就随之结束。如下面代码所示:

#include<stdio.h>
int main()
{
    int line = 0;
    printf("insist codeing >\n");
    while(line < 20000)
    {
        printf("写代码\n");
        line++;            
    }
    if(line == 20000)
    {
        printf("好offer\n");    
    }
    return 0;
}

编译运行结果为:377f6455b9834cd9bb384f1389e63e7d.png(因为这里代码过多就截取一小部分)。



8.函数


如何理解


在我们学习数学的时候,也学过函数,它们表示为f(x),C语言中也存在着函数。

程序中存在main函数,那么除了main函数可不可以编写其他的函数呢?可以!!!


函数的结构

2e117cd263224fb989d56f300a38ce77.png


实现Add函数

#include<stdio.h>
int Add(int x,int y)
{
    return (x + y);
} 
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    scanf("%d%d",&num1,&num2);
    sum = Add(num1,num2);
    printf("%d\n",sum);    
}


分析:用sum来接受Add函数所返回的值的同时调用Add函数,于是num1和num2在进行Add函数计算后,返回值为num1 + num2的值。



为什么使用函数


   想象一下,如果这边有很多组数据要想加,使用平时的思路,我们需要初始化很多次,代码冗长,不美观,效率低,但是如果我们封装一个函数,可以达到事半功倍的效果。



9. 数组


如果要存储1-10的数字,怎么存储?

使用数组。

C语言中给了数组的定义:一组相同类型元素的集合



9.1 数组定义


   int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定义一个整形数组

   char ch[5] = { 0 };//对char类型数组不完全初始化,其中元素默认被初始化为0

   char ch2[] = {'a','b','c'};//这样也正确

   char ch3[] = { 0 };//正确,元素个数为1个,元素为\0



9.2 数组的下标


C语言规定:数组的每个元素都有一个下标,下标是从0开始的。

数组是通过下标来访问的。


1df034bb828e4ede9787f11c4d8401bd.png



代码演示:

 

#include<stdio.h>
    int main()
    {
        int arr[5] = { 1, 2, 3, 4, 5};
        printf("%d\n",arr[3]);//访问下标为3的元素
        //printf("%d\n",arr[10])//不可以这样访问!!!
    }


请注意数组不能越界访问,例如:arr[10]就越界访问了!!!越界访问可能会导致程序崩溃,程序出错等严重后果。


设想一下:你在一层楼中买了两套房子,但是你自己的房子不住,偏偏要去住别人的房子,这是什么,这就是非法访问,严重的是要被抓起来了,就说明你违法了!!!所以越界访问的危险可见一斑。



9.3 数组的使用

#include<stdio.h>
int main()
{
    int arr[10] = { 0 }; 
    //0~9
    //输入10个值给数组
    int i =0;
    while(i<10)
    {
        scanf("%d",&arr[i]);
        i++;    
    }
    //输出数组的10个值
    i = 0;
    while(i<10)
    {
        printf("%d ",arr[i]);
        i++;    
    }
    return 0;
}







相关文章
|
程序员 编译器 C语言
初识C语言——C语言基础知识(一)
初识C语言——C语言基础知识(一)
73 0
初识C语言——C语言基础知识(一)
|
6月前
|
C语言
『C语言初阶』第一章-初识C语言(1)
『C语言初阶』第一章-初识C语言(1)
|
存储 Java 编译器
【C语言初阶】C语言入门——第一讲
本篇主要介绍了一些C语言的基础知识,如何编写一个C程序、数据类型、常量、变量、字符串、转义字符等,专为C语言的初学者所准备
141 1
|
6月前
|
算法 C语言
『C语言初阶』第二章-初识C语言(2)
『C语言初阶』第二章-初识C语言(2)
|
存储 编译器 C语言
初识C语言——C语言基础知识(四)
初识C语言——C语言基础知识(四)
53 0
|
C语言
初识C语言——C语言基础知识(二)
初识C语言——C语言基础知识(二)
59 0
|
C语言
【初识C语言】笔记(1-2)
【初识C语言】笔记(1-2)
107 0
|
存储 C语言
【初识C语言】笔记 (1-4)
【初识C语言】笔记 (1-4)
78 0
【初识C语言】笔记 (1-4)
|
Java 程序员 编译器
C语言笔记第01章:初识C语言(二)
C语言笔记第01章:初识C语言
141 0
|
存储 IDE 程序员
C语言笔记第01章:初识C语言(一)
C语言笔记第01章:初识C语言
71 0