你是真的“C”——初识C语言篇

简介: 初识C语言
   哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

一、什么是C语言,C语言具体是什么?🙌

   C语言是什么,百度一下你就知道!这里就不多赘述啦!在这里,我就用一句俗语概括一下它的重要性吧:==“C生万物”==。我这里大致将C语言整体语言结构大致分为:==数据类型,常量、变量,字符串+转义字符+注释,选择语句,循环语句,函数,数组,操作符,常见的关键字,define定义的常量和宏,指针,结构体。== 接下来,我将围绕👇方面对需要注意的地方重点介绍。

1.1数据类型🙌

   在C语言中给我们提供好的常见的==数据类型==有以下几种。

在这里插入图片描述

   面对那么多的数据类型,是不是有点不知所措啊?我一开始了解到有这么多的数据类型就是这种感觉。不过不要担心,我带着大家一步步的了解他们。首先咋们先看看他们各自所占空间的大小,这里可以用==sizeof关键字==来look一下他们各自所占空间的大小(已==字节==为单位)
在这里插入图片描述
   从下面的代码运行图可以展现出他们各自所占空间的大小啦!这里要悄咪咪的告诉大家一个很重的事情:在32位系统下,指针所占的空间大小..........诶诶,还是在后面俺介绍指针的时候再说叭,不急不急。
在这里插入图片描述
   在==C语言==中是没有字符串数据类型的,一般我们可以用==字符数组来存储字符串==。而在==C++==中就有==字符串数据类型string==。C语言定义好的数据类型,还远远无法描述我们这个精彩的世界,这就需要我们自定义一些数据类型啦!这就要使用到我们的结构体==struct==,这里就不介绍啦,精彩在后文!
然后,字节是什么呢?这里简单的通过画图然大家简单的了解一下:

在这里插入图片描述

1.2 常量、变量🙌

   对于常量、变量这些概念是什么?如何定义和使用?这些大家都会的东西我就不一一赘述啦!咋们直接上==重点==
主要有以下几个值得大家注意的地方:

**1. 变量的命名:
(1)只用由字母(包括大小写)、数字和下划线 _ 组成。
(2)不能以数字开头。
(3)长度不能超过63个字符。
(4)变量名区分大小写且不能使用关键字命名。

  1. 变量的分类:局部变量+全局变量。
  2. 局部变量的优先使用如何理解?**

   这里用图来展示以下局部变量的优先使用:😍

在这里插入图片描述
   这里小结一下:==当局部变量和全局变量同名的时候,“局部优先”。==

  1. 局部变量和全局变量的生命周期:

   这里所说的生命周期,通常我们用作用域来理解,也就是这个变量的作用范围。简单的来说,局部变量的作用域:==局部变量所在的局部范围==。全局变量的作用域:==整个工程。==
代码结果运行图:👇局部变量作用域
全局变量作用域
这里小结一下:局部变量的作用域:==局部变量所在的局部范围==。

                   **全局变量的作用域:**==整个工程。==

   介绍了那么多变量的知识。现在我们浅谈一下我们的常量。
   在C语言中,可将常量分为👇几类:

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

   接下来用代码解析图辅助大家更好的理解:😍

在这里插入图片描述

   这里n虽然被const修饰,具有了==常属性==,不能被修改,但是==本质上还是变量==,所以不能用来指定数组的大小。C99中,引入了:变长数组的概念,变长数组的大小是可以使用变量来指定的,但是数据不能初始化。VS2019是不支持C99中的变长数组的,所以没法验证。
在这里插入图片描述
   define定义的标识符常量代码:👇

#include<stdio.h>
#define 定义的标识符常量

#define MAX 1000

int main()
{
    int arr[MAX];
#define MIN 0
    printf("%d\n", MAX);
    //MAX = 2000;
    printf("%d\n", MIN);

    return 0;
}

   枚举常量定义的代码

#include<stdio.h>
声明的一个表示性别的枚举类型
enum Sex
{
    下面三个符号是Sex这个枚举类型的未来的可能取值
    枚举常量
    MALE=5,  //0    //这里如果初始化,则第一个成员,默认为0,依次递增;如果初始化了,则按照初始化的数值依次递增下去。
    FEMALE,//1
    SECRET //2
};

int main()
{
    //enum Sex s = FEMALE;
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    //MALE = 5;

    return 0;
}



//%d - 打印整型
//%s- 打印字符串
//%c - 打印字符的

1.3 字符串+转义字符+注释🙌

首先先初步分析==字符和字符串==

  1. 在C语言我们表示一个字符的用单引号,例如:‘a’;用双引号来表示字符串"abcdef"。
  2. 字符串的定义,由于C语言没有字符串数据类型,所以在C语言中常用到字符数组,特别注意的是,其隐含\0,而单个字符定义则不包括\0。

👇我用代码图来辅助大家理解:😍

在这里插入图片描述
   对应的代码:

#include <string.h>
#include<stdio.h>
int main()
{
    //字符数组
    char arr1[] = "abc";
    char arr2[] = { 'a', 'b', 'c' };
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    return 0;
}
  1. 求字符串长度要使用strlen。strlen 是一个库函数,专门用来求字符串长度的。

我用👇 的代码图帮助大家理解:😍
在这里插入图片描述
   对于转义字符,在C语言中有很多,我这里就列举几个比较常见的给大家认识认识:

转义字符 释义
\0 换行
\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\r 回车
\t 水平制表符
\ddd ddd表示1~3个八进制的数字。如:\130 X
\xdd dd表示2个十六进制的数字。如:\x30 0

   接下来用代码分析图帮助大家理解:😍
在这里插入图片描述

   注释:注释虽然很简单,但是对于我们的帮助很大,当我们写一个非常复杂的项目时,或者在以后从事团队开发时,良好的编写==注释可以帮助我们更好的阅读代码,提高工作的效率==。废话不多讲,先介绍一下注释的使用方法和语法:😍

  1. // 表示注释一行
  2. /*..............
    .................*/表示注释一段

1.4选择语句🙌

   选择语句比较常见得有:

  1. if().....else if....else{};
  2. switch 语句;

首先介绍咋们最经典的if选择语句,这里写一个简易的代码图帮助大家了解了解

   用一道题目来简单的了解一下switch的使用方法:
在这里插入图片描述

#include <stdio.h>
enum
    {
       Monday=1,
       Tuesday,
       Wednesday,
       Thursday,
       Friday,
       Saturday,
       Sunday,
    };
int main()
{
    int a =0;
    scanf("%d",&a);
    switch(a)
    {
        case Monday:
        {
            printf("Monday");
            break;
        }
        case Tuesday:
        {
            printf("Tuesday");
            break;
        }
        case Wednesday:
        {
            printf("Wednesday");
            break;
        }
        case Thursday:
        {
            printf("Thursday");
            break;
        }
        case Friday:
        {
            printf("Friday");
            break;
        }
        case Saturday:
        {
            printf("Saturday");
            break;
        }
        case Sunday:
        {
            printf("Sunday");
            break;
        }
    }
    return 0;
}

   书写switch语句时,可不要忘记了他的两个好兄弟,==一个是case,另一个叫break==具体如何使用,我相信聪明的你可以通过上面的代码熟练掌握,也可以根据我写的代码借鉴学习一下,然后拿上面那道题练练手。👇我把这道题的链接给到大家。😘

链接: 牛客网入门题目--牛牛的一周

1.5循环语句🙌

   我把C语言常用到的循环语句总结为以下几中:

  • for循环
  • while循环
  • do......while循环

👇就简单写个代码,利用while书写一个栗子。会书写一种其他自然也就不是难事,话不多说,上代码!😍

#include<stdio.h>
int main()
{
    int line = 0;
    printf("自主学习,励志敲完两万行代码\n");

    while (line<20000)
    {
        //...
        printf("敲代码:%d\n", line);
        line++;
    }
    if (line >= 20000)
        printf("好offer\n");

    return 0;
}

1.6 数组🙌

   接下来,我给大家介绍以下数组的大概,==旨在让大家初识数组为目的==。在以后的博客中会对这篇提到的各点都会进行详细的,刨根问底的给大家分析,那就先期待这吧!数组,顾名思义,可以简单的理解为==一类数的集合。==
我们可以将数组分为很多很多种类型,大家以后学习比较常见的有以下几种:

  • 整形数组
  • 浮点型数组
  • 指针数组
  • 一维数组
  • 二维数组

   其实关于数组的类型还有很多,这里只是举了几种比较常见的,大家在学校可能会学到的数组知识,如果还有uu没有听说过这些名称的话,下来一定要好好恶补一下咯。在介绍上述方面的时候已经运用到了数组的创建,定义代码,而且这个也比较简单,这里就不详细赘述啦,有关数组的难点,易错点,==后期我会专门出一篇博客来剖析数组,届时欢迎大家前来给个赞赞,当然最重要是想把知识分享给大家啦!== 😘

1.7函数🙌

   函数是什么呢?其实这和我们数学课本上的函数功能类似但也有不同之处。
接下来就通过一道题目让大家简单的了解一下函数的使用和体会C语言的函数之美。废话不多说,咋们直接上代码!😉

#include <stdio.h>

int Add(int a,int b)//Add函数的定义
{
    int sum = 0;
    sum = a + b;
    return sum;
 }
int main()
{
    int a = 3;
    int b = 4;
    scanf("%d %d", &a, &b);
    int s = Add(a,b);//调用Add函数
    printf("%d", s);
    return 0;
}

   函数的特点就是:==简化代码,代码复用。==当我们以后写的项目比较复杂,代码量上万行时,函数的优势和作用将更大的展现出来。

1.8 操作符🙌

   在C语言中,有各种各样十分有用的==操作符==。如下图所示。如果能够熟练地掌握各种操作符,会让自己的代码能力更上一层楼。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
   还有一种操作符叫: 逗号表达式:exp1,exp2,exp3.........expn
   逗号表达式的结果只跟逗号表达式最后一个数有关,跟前面的没有半毛钱关系。

1.9 常见的关键字🙌

   在C语言中,也存在着很多十分有用的关键字,总的来说可以概括为下面这些关键字。如下图所示:
在这里插入图片描述
   这里就不带着大家一一分析啦,先挑出几个比较常见、常使用的关键字简单了解一下。
   ==typedef== 起到重命名的作用,这个关键字在以后大家学到数据结构的时候经常能够使用到。接下来用代码来帮助大家理解一下:

typedef 类型重命名 - 别名
typedef struct Node
{
    int data;
    struct Node* next;
}Node;//将struct Node命名为Node。

   关键字static:在C语言中,static用来修饰变量和函数的。

  • 修饰局部变量-称为静态局部变量
  • 修饰全局变量-称为静态全局变量
  • 修饰函数-称为静态函数

使用static时,有👇几个注意的点,大家需要了解和关注的:

  • .==static修饰局部变量: 一个普通的局部变量是放在栈区的,而被static的修饰的局部变量,是放在内存的静态区的 ,存储位置发生了变化,使得局部变量出了作用域不会销毁,影响了变量的生命周期,但作用域不受影响==
  • ==static修饰全局变量: 一个全局变量在整个工程中都可以使用的!全局变量是具有外部链接属性的,在其他源文件内部只要适当地声明就可以使用。而static修饰全局变量,这时全局变量的外部链接属性就变成了内部链接属性,只能在自己所在的.c文件内部使用,在其他.c文件无法使用,影响了变量的作用域。==

2.1 define定义的常量和宏🙌

#define 定义常量和宏
#define M 100  //这里的M就是100
#define STR "hello bit"//这里的STR就是字符串 "hello bit"

2.2 指针🙌

   指针这个东西想必学过一点C语言的都知道它是C语言知识的一个重点和难点。但也不是说指针难到学不会那种,干就完事咯!指针的类型也有很多。接下来就用代码来简单的初识一下指针。

int main()
{
    int a = 10;
    int* pa = &a;//把pa叫指针变量, & - 取地址操作符 

    printf("%d\n", a);
    //*pa = 20;  //* 解引用操作符
    printf("%d\n", a);
    printf("%p\n", &a);//这里的%p是专门用来打印地址的。
    printf("%d\n", *pa);
    return 0;
}

2.3 结构体🙌

   在前面的数据类型时,我提到了一下结构体。在C语言中,结构体发挥着巨大的作用。我们可以 利用结构体来自定义我们想要的数据类型。 接下来,我用一段简单的代码,来介绍👇结构体的使用语法。

struct Student
{
    char name[20];//名字
    int age;//年龄
    char id[15];//学号
    float score;//成绩
};


int main()
{
    struct Student s1 = { "张三", 20, "2022010823", 88.5f };//定义结构体对象以及初始化
    printf("%s %d %s %f\n", s1.name, s1.age, s1.id, s1.score);

    struct Student* ps = &s1;//定义结构体指针并指向s1的位置
    printf("%s %d %s %f\n", (*ps).name, (*ps).age, (*ps).id, (*ps).score);//结构体变量.成员
    printf("%s %d %s %f\n", ps->name, ps->age, ps->id, ps->score);//结构体指针->成员
    
    


    return 0;
}

总结撒花🙌

   ==本篇文章旨在带领大家初识C语言==,让大家对C语言有一个大概的了解。后期我还会对每一部分进行刨根挖底的了解和学习,届时再将本人的学习心得分享给各位uu们。如果我写的有什么的不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘

相关文章
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1063 0
|
10天前
|
人工智能 运维 安全
|
1天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
242 0
|
8天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
738 23