【零基础上手C语言】——初识C语言(1)基础认识C语言内容

简介: 基础认识C语言内容,并简单实现一个C语言程序

认识C语言

首先,来看C语言之前,我们先来讨论一下“语言”

什么是语言?

(语言是人类用嘴说出来的话,它由语音、语汇和语法所组成,它跟思想有密切关系,是表达情意、传递思想的重要工具,是人类区别于其他动物的本质特征。)
从官方解释来看,语言其本质来说就是沟通的工具。
人和人之间的语言:汉语、英语、法语、日语 西班牙语...
那人和机器之间又怎么沟通呢?
于是演变出了计算机语言:C/C++/Java/Python/go等上百种语言

那什么又是C语言呢?

C语言是一门通用计算机编程语言 ,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级储存器、产生少量机器码以及不需任何运行环境支持便能运行的编程语言。

计算机语言的发展


image.png

C语言是母体语言,是人机交互接近底层的桥梁。学习C有助于更好的理解C++,Java,C#,Perl以及其他基于C的特性的语言。
第一开始就学习其他语言的程序员往往不能很好的掌握继承自C语言的基本特性。
同时近50年间,在TIOBE排行榜中,C/C++位置长期霸占前三名,没有丝毫撼动,可谓经典永不过时!
image.png

第一个C语言程序

编译器的基本使用

C语言的实现需要编译器,这里以VS2019(集成开发环境(IDE))为示例
实现一个C语言代码的步骤:
(1)在编辑器中创建一个项目
image.png
image.png
image.png

(2)在项目中创建xxx.c文件
当创建好项目,进入界面,找到解决方案资源管理器
image.png

然后鼠标右键点击源文件,在子菜单中鼠标移动到添加,在下一级菜单中点击新建项
image.png

注意:如果你的界面中未出现解决方案资源管理器,可从界面上方工具栏中的视图中找到
image.png

当你添加新建项后,会进入下图界面,先点击C++文件,随后将名称改为.c为后缀的文件,最后点击添加
image.png

(3)编写代码并运行
这就是你创建好的C语言源文件,点开你的文件进行代码编写即可
image.png

当你编写好代码后,在工具栏中的调试中点击开始执行或开始调试(也可使用命令后对应的快捷键进行操作),即可使代码开始运行
image.png

数据类型

在我们使用C语言编写代码时,,总离不开去定义一些变量,那这些数据在计算机内存中又是怎么存储的呢?又是以什么方式进行存储?接下来我就介绍一些基础的数据类型

C语言的数据类型基本有以下几种:

    char      //字符数据类型
    short     //短整型
    int       //整形
    long      //长整型
    long long //更长的整型
    float     //单精度浮点数
    double    //双精度浮点数

不知你有没有想过为什么会创建这么多的数据类型呢?设置一种数据类型不就行了吗?何必自取其扰呢?
其实设置这么多数据类型都是有他的缘由的,为回答这个问题,我们还是先看一下每种类型所创建的空间在内存中所占的大小。

#include<stdio.h>
int main()
{
    printf("%d\n", sizeof(char));
    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
return 0;
}

image.png

从运行结果来看,每种类型在内存中所占大小是不同的,所以给每一个变量用一个合适的数据类型进行修饰,可以更高效地利用内存空间,节省内存。在我们早期的计算机中,存储空间很小,内存是很珍贵的,能省则省,所以我们才要给数据分配合适的存储空间进行使用。
但是我们这里代码运行的结果所呈现出来的数字又是什么意思呢?它的单位又是什么呢?为了解答这个问题,就不得不先解释一下数据在内存中是如何存储的了。在这里先告诉大家这里的单位是字节(byte)
计算机中,最小的单位是比特位(bit),再往上就是字节(byte),生活中常见的有kb、mb、gb、tb、pb。
image.png

众所周知,计算机是一个硬件,需要通电,分为正电和负电,正好对应1/0二进制位,所以,我们计算机存储和处理的就是二进制,那么一个二进制位(也就是0/1)就被储存一个bit的空间里
1个字节由8个比特位(bit)组成,01001001就代表一个字节
下图是一个整型数据存储的流程
image.png

数据类型的使用

//数据类型 变量名 = 初始值
char ch = 'Q'
int age = 19
float stature = 1.77f

以上述代码第一个char类型举例,它的意思代表的是:向计算机 用char字符数据类型 申请一块1个字节的存储空间,并为该空间取名为ch,并在该空间内存储‘Q’。
另外注意:.C语言规定,sizeof(long)>=sizeof(int),所以我们经常见到sizeof(long)为4或者8(建议一般情况下尽量不使用long)

变量、常量

变量命名

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

变量的分类

局部变量

局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。

全局变量

全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为 extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

//示例
#include <stdio.h>
int a = 100;//全局变量
int main()
{
    int b = 10;//局部变量
    return 0;
}

但如果出现以下情况,局部变量名和全局变量名冲突时,程序又怎么运行呢?两个变量的设置又有没有问题呢?

#include <stdio.h>
int a = 100;//全局变量
int main()
{
    int a = 10;//局部变量
    printf("%d\n", a);
    return 0;
}

运行结果
image.png

从运行结果来看,程序顺利执行,说明变量设置没有问题,但是是局部变量被执行了
总结:当局部变量和全局变量同名时,局部变量优先使用(戏称:就近原则)

变量的作用域和生命周期

作用域
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
1.局部变量的作用域是变量所在的局部范围
2.全局变量的作用域是整个工程
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
2.全局变量的生命周期是:整个程序的生命周期

常量

C语言中的常量和变量的定义的形式有所差异
C语言中的常量分为以下几种:
字面常量
const修饰的常变量
#define定义的标识符常量
枚举常量

#include <stdio.h>
//举例
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量

    //const修饰的常变量
    const float pai = 3.14f;//这里的pai是const修饰的常变量
    pai = 5.14;//pai是不能直接修改的!

    //#define的标识符常量演示
    #define MAX 100
    printf("MAX = %d\n", MAX);

    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    //注意:枚举常量的默认是从0开始,依次向下递增1
    return 0;
}

注:
上面例子中的pai被称为const修饰的常变量,const修饰的常变量在C语言中只是在语法层面限制了变量pai不能被改变,但是pai本质上还是变量,所以叫常变量

字符串

"hello word.\n"

这种由双引号(Double Quote)引起来的一串字符成为字符串字面值(String Literal),或者简称字符串
注:字符串的结束标志是'\0'的转义字符
在计算字符串长度的时候'\0'是结束标志,不算作字符串内容

#include <stdio.h>

//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)

int main()
{
    char arr1[] = "bit";
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    return 0;
}

转义字符

如果我们在屏幕上要打印一个目录

c:\code\test.c

你可能写下的代码是这样的

#include <stdio.h>

int main()
{
   
 printf("c:\code\test.c\n");
    return 0;
}

但运行结果却是这样的
image.png

为什么会出现这种结果呢,这里就需要提及一下转义字符
转义字符顾名思义就是转变意思
下面举例一些转义字符:

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

本篇只是大致介绍一下C语言的基础内容,其他比如if语句,for循环语句,函数等知识会在后面文章中一一提及。感兴趣的的小伙伴点点赞,点点关注,谢谢大家的阅读哦!!!
点点关注,后期不错过哦。😘
你们的鼓励就是我的动力,下一篇将会对分支、循环语句进行详细的讲解,欢迎下次继续阅读!!!😘😘😘

相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
Python
Django进行grpc通信
Django进行grpc通信
559 0
|
机器学习/深度学习 算法 数据可视化
一图胜千言:EBImage库分割和标注让你的图像说话
一图胜千言:EBImage库分割和标注让你的图像说话
601 0
|
人工智能 自然语言处理 测试技术
中文大模型体验测评系列(一)
本文主要通过体验中文竞技场大模型,并详细记录体验过程及感受。
100334 84
|
11月前
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
|
9月前
|
传感器 编解码 开发者
DevEcoStudio 中使用模拟器时如何过滤日志
在鸿蒙开发中,使用 DevEcoStudio 模拟器时,无过滤模式会输出所有系统日志,可能造成信息过载。为高效调试,可自定义日志过滤规则:进入 Hilog &gt; Settings &gt; Filter,设置 Log level(如 Info)和 Log message(如 A03d00/JSAPP)。日志内容涵盖启动、系统运行、应用及硬件模拟等类型,级别包括 DEBUG、INFO、WARN、ERROR 和 FATAL,助您精准定位问题。
236 0
|
12月前
|
存储 SQL 数据挖掘
数据无界、湖仓无界, Apache Doris 湖仓一体解决方案全面解读(上篇)
湖仓一体架构融合了数据湖的低成本、高扩展性,以及数据仓库的高性能、强数据治理能力,高效应对大数据时代的挑战。为助力企业实现湖仓一体的建设,Apache Doris 提出了数据无界和湖仓无界核心理念,并结合自身特性,助力企业加速从 0 到 1 构建湖仓体系,降低转型过程中的风险和成本。本文将对湖仓一体演进及 Apache Doris 湖仓一体方案进行介绍。
1159 1
数据无界、湖仓无界, Apache Doris 湖仓一体解决方案全面解读(上篇)
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
257 1
|
JSON 安全 数据安全/隐私保护
从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用
【9月更文挑战第22天】在.NET 8中,从零开始搭建权限管理系统并使用JWT(JSON Web Tokens)创建Token是关键步骤。JWT是一种开放标准(RFC 7519),用于安全传输信息,由头部、载荷和签名三部分组成。首先需安装`Microsoft.AspNetCore.Authentication.JwtBearer`包,并在`Program.cs`中配置JWT服务。接着,创建一个静态方法`GenerateToken`生成包含用户名和角色的Token。最后,在控制器中使用`[Authorize]`属性验证和解析Token,从而实现身份验证和授权功能。
1303 4
|
关系型数据库 MySQL Linux
CentOS7.9 安装 mysql-8.0.36 踩坑小记
CentOS7.9 安装 mysql-8.0.36排错指南
1226 1
|
编解码 Python
问题解决:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xcf in position 0: invalid continuation by
问题解决:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xcf in position 0: invalid continuation by
4212 0
问题解决:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xcf in position 0: invalid continuation by