初识C语言之一:秃头之路的开始

Posted Echoyaho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识C语言之一:秃头之路的开始相关的知识,希望对你有一定的参考价值。

初识C语言之一:秃头之路的开始

目录:

  1. 第一个C语言程序
  2. 数据类型
  3. 常量和变量
  4. 字符串

前言:

因为上次已经自我介绍过了,所以在这里就不多赘述了。这是小白的第二篇博客,也是第一篇技术博客,本篇呢,旨在让大家对C语言有一个简单的了解,不过这个了解呢仅限于,知道里面有哪些语法呀,有什么关键词呀,简单的使用呀之类的,不会太过深入的讲解,只是让大家能有一个映像。还有就是,因为小白的实力有限,所以如果哪里讲的不对请各位dalao多多指正!(respect!.jpg)

我是分隔线

一、第一个C语言程序

#include <stdio.h>
int main()
{
    printf("Hello World!");
    return 0;
}

首先呢,这是一段简单的C语言代码,但这也是走上程序员这条路上之后向世界打的第一个招呼,所以让我们来了解一下这个程序的组成吧!

#include <stdio.h>
//包含一个<stdio.h>头文件,可以使用头文件里有的函数
int main()  //创建主函数,每个C语言程序都有且只有一个主函数
{
 printf("Hello World!"); //调用<stdio.h>里面的'printf'函数来输出"Hello World!"
 return 0; //函数的返回值为0
}

然后解释一下里面每个步骤的具体意义~(可能描述的不太准确,欢迎各位大佬补充!)


Q1:#include <stdio.h>这样做的意义是什么呢?

A1:主要的作用是让我们可以使用被包含文件中的函数。因为C语言拥有庞大的C语言标准库,这个标准库里面包含有一组C内置函数、常量和头文件。而头文件(#include包含的后缀名为.h的文件)呢,里面大多是我们常用到的一些函数,我们把它叫做库函数,因为这是已经写好了的,所以我们直接调用就可以。用起来超级方便,不用自己去写。像<stdio.h>这个头文件里面就是包含的标准输入输出函数,第4行里的"printf()",就是这个库里面的一个输出函数。这样的头文件还有很多,都包含着我们常用的一些功能的函数,例如<ctype.h>,<stdlib.h>…等等。而且#include还是一条预处理指令,至于预处理则是为方便编译器处理而设置的一种机制,包括一些常用预处理器和语句,我们统称为预处理系统。关于预处理我在这里不做太多解释,后面会讲的,现在只是简单的了解一下~。


Q2:int main()在代码中有什么作用呢,为什么要这样写呢?

A2:int main()的作用,是在程序中创建一个主控函数,它是程序执行的起点,但是程序中如果有其他函数的话,就要先完成对其他函数的调用,然后再返回到主函数,最后用main()这个函数结束整个程序。至于为什么要这么写。其实还有另外一种写法:

#include <stdio.h>
void main() //void 类型的函数没有返回值
{

}

但是这种方法已经过时了,现在基本上已经不用了。所以我是这样的另一种写法写的~

注意!:一个C语言程序,有且只有一个main()函数!!!!,如果有多个,编译器可能不会报错,但是程序运行起来肯定有问题(一般来说编译器是会报错的吧!)


Q3:printf(“Hello World!”);是什么意思呢?

A3:这行代码的意思是调用函数输出“Hello Wrold!",而这个函数因为是<stdio.h>里面的库函数,所以不用自己声明,如果是自己写的函数的话,则要在主函数前进行声明,声明的格式是

返回值类型 函数名称 (形参);

至于函数怎么定义的话,后面会详细说说的。


Q4:return 0; 的作用是什么?

A4:return是 C语言中的一个关键字,它的作用是指定函数得返回值,什么是返回值呢?,它是程序达到一定条件或者程序运行完毕之后返回的一个值,这个值可以用变量来接收,然后使用这个值的(至于什么是变量接下来就会讲),但是不是所有函数都有返回值,如果定义函数的时候指定函数的返回值类型为void 那么这个函数里面就不用return 关键词,也就没有返回值了。

我是分隔线

二、数据类型

在这里插入图片描述

这里我用思维导图的方式,把C语言中的数据类型给列出来了,但是像自定义和无符号型哪些我就没有列出了,自定义的数据类型,后面会详细再讲的。


在这里我一共列出了8种数据类型,为什么C语言中要有这么多数据类型呢?

存在这么多数据类型是为了更加丰富的表达生活中的各种值。并且各种类型的值的最大、最小值以及在占用存储空间的大小上也各有不同,这样可以使程序员更加灵活的操纵存储空间

C语言中各种类型所占存储空间的大小(64位机版,单位:字节)
Charintlonglong longshortfloatdoublelong double
1Byte4Byte8Byte8Byte2/4Byte4Byte8Byte16Byte

看到这里,我就要说一下C语言中的几条规则了:

  1. short、long类型的长度不确定,在不同的主机(编译器)上有不同的大小,但是要遵循short类型不能比int大,可以和int相等(short最小是2字节),long不能比int小(long最小是4字节)。
  2. int类型的大小通常和机器的物理字长相同,通常是2字节或者4字节,根据硬件的不同自由确定
  3. char类型一般是1个字节,但是ANSI(美国国家标准学会)里没有硬性的规定它的长度,某些嵌入式编译器可能是2个字节。

讲到这里,C语言中基本的数据类型就讲完了,接下来我们就来学习一下怎样使用这些数据类型(定义变量和常量)。

我是分隔线

三、常量和变量

在我们的日常生活中有些值是不能变的,比如身份证号码、血型、圆周率…等等,但是有些值是可变的比如年龄、工资、体重…

这些值,在C语言中用常量和变量表示,不变的量就是常量,能变的量就是变量。

首先,我们来看定义变量的方法:

#include <stdio.h>
int main()
{
    int i=10;   //定义一个int类型的变量
    char ch="A"; //定义char类型的变量
    float weight="99.5";  //定义float类型的变量
    return 0;
}

上面这一段代码就定义了三个变量,分别是int类型、char类型、float类型的变量,其他类型的变量也是这样定义的,很简单~

然后我们来看看变量的分类:

变量分为两类:

  1. 局部变量:

    局部变量就是只能在函数内部使用的变量,调用函数时创建,调用结束后销毁的变量。这里还是涉及到一个函数的作用域和声明周期的概念,我们待会儿再讲。

  1. 全局变量:

全局变量就和局部变量不一样,它可以再整个项目中使用,而不是被限制在某个函数中,意思就是在同一个项目的不同文件中,都可以使用其他文件中定义的全局变量。

接下来我用一段代码来说明一下全局变量和局部变量:

#include <stdio.h>
int global=0; //定义一个全局变量
int main()
{
    int local=1;  //定义一个局部变量
    int global=2; //局部变量
    return 0;
}

在这段代码里,有两个局部变量和一个全局变量,但是有一个局部变量和全局变量相等,这时候我们是使用全局变量还是局部变量呢?

当全局变量和局部变量冲突时,优先使用的是局部变量!


刚刚提到了变量的作用域和生命周期,在这里我就简单的解释一下!

首先说作用域:

之所以有局部变量和全局变量之分,就是因为他们的作用域不一样。作用域嘛,就是变量作用的范围,也可以理解成能够使用该变量的范围,就是该变量的作用域。局部变量的作用域一般就是该变量所在的函数内部,而全局变量的作用域呢就是整个工程。

然后生命周期:

生命周期就是创建变量到销毁变量之间的时间段。

局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。换句话说就是函数开始,局部变量的生命周期开始,函数结束,局部变量的生命周期结束。

全局变量的生命周期:就是整个程序的生命周期,程序开始全局变量的生命周期开始,程序结束全局变量的生命周期结束。

说完变量了,接下来就该说常量了!

在C语言中常量分为以下几种:

  • 字面常量
  • 关键字const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量

接下来我用代码演示以下各种常量的创建:

#include <stdio.h>

#define MAX 114514
//MAX 是标识符常量
enum color
{
    RED,
    GREEN,
    BLUE
};
//方括号中的RED、GREEN、BLUE都是枚举常量`在这里插入代码片`
int main()
{
    100;  //是字面常量
    const int i=100; //是用const修饰的常量
    return 0;
}

在C语言中定义常量和变量的方式略有不同,从定义常量和定义变量的代码中可以看出,我就不再一一解释了~

然后在这里讲一些关于常量的注意事项:

  1. c语言中的常量是不能作为左值的,也就是常量不允许修改

  2. #define是C语言中的一个宏定义命令(和include一样也是一个预处理指令),它用来将标识符定义为其后的常量。

  3. enum 是定义枚举的关键字,现在我们只需要知道它是用来定义枚举常量的,就可以了,并且enum关键字定义的枚举常量的值是默认是从1开始的,后面的依次是前一个变量+1,但是枚举常量我们是可以自己在枚举里赋值的,注意是在枚举里面赋值,而不是在外面对枚举常量进行修改。我用一段代码来演示一下。

    #include <stdio.h>
    enum color
    {
        RED,
        GREEN,
        BLUE
    };
    //这里面的枚举常量RED=1,GREEN=2,BLUE=3,这是默认的值,但是我们可以进行修改
    enum sex
    {
        MALE,
        FEMALE=10,
        SECRET
    }
    //这里面的枚举常量MALE=1,FEMALE=10,SECRET=11。
    int main()
    {
        printf("RED=%d\\tGREEN=%d\\t\\tBLUE=%d\\t\\n\\nMALE=%d\\tFEMALE=%d\\tSECRET=%d\\n",
               RED, GREEN, BLUE, MALE, FEMALE, SECRET);
        return 0;
    }
    

    我再展示一下这段代码的运行结果:

在这里插入图片描述

相信看到这里你对常量和变量应该有一定的了解了,因为这是初识C语言,我们也就不再进行更深层的学习了,如果有兴趣大家可以自行上网查阅资料学习哦~

那接下来我们就开始下一个内容:字符串!

我是分隔线

四、字符串

相信你应该很疑惑,在讲数据类型的时候为什么没有讲到string类型,也就是字符串类型,因为,其实在其他语言里面string类型也不是它的最基本类型,只不过作为标准库提供出来方便使用,但是C语言没有这样做,所以自然就没有string类型了。但是没有string类型不代表不能实现字符串。

所以先让我们来了解一下C语言中字符串的概念:

在C语言中用双引号括起来的内容称为字符串字面量,也叫作字符串常量双引号中的字符和编译器自动加入末尾的\\0字符,都作为字符串储存在内存中。

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

然后我们用代码来实现一下字符串:

#include <stdio.h>
int main()
{
    char arr1[]="abc"; //双引号中的字符,编译器会自动加入字符'\\0'作为字符串结尾
    char arr2[]={'a','b','c','\\0'}; //而数组则需要自己手动添加'\\0'作为结尾字符
    char arr3[]={'a','b','c'};//如果数组末尾没有添加'\\0'的话,在进行字符串操作的时候就会产生
    						  //无法预估的错误,产生这种错误的原因是因为,进行字符串操作时,
                              //要读到'\\0'也就是字符串结尾才会结束,如果一直读不到'\\0'
                              //就会一直读下去,直到读取到'\\0'为止。
    return 0;
}

结语:本次的知识分享就先到这里了,谢谢各位看官的看到最后,如果各位大佬有什么建议,或者我写的博客里面哪里讲错了,敬请批评!

哥哥哥哥,姐姐姐姐,给个三连可以吗(看不见我…看不见我…)

以上是关于初识C语言之一:秃头之路的开始的主要内容,如果未能解决你的问题,请参考以下文章

初识C语言之一:秃头之路的开始

Python之路-初识python及环境搭建并测试

《前端之路》之 初识 JavaScript

C语言初识,一些基本的C语言知识。驽马的C语言学习之路

编程小白的秃头之路!

Python之路:初识