C语言基础:概述、数据类型和常量

主要内容

  • C语言概述
  • 数据类型
  • 常量与变量

C语言概述

预备知识

计算机的组成
计算机组成
  • 计算机:能进行计算机和逻辑处理的设备

  • 硬件:组成计算机的各种物理部件(内存条、CPU、鼠标、键盘…)

    硬件=电子设备+单片机编程(单片机、微控制器)+集成电路(原理图PCB设计)+嵌入式系统

  • 软件:计算机中运行的程序和数据

    软件=系统软件(Linux系统)+应用软件+编程语言(C/C++)+算法和数据结构

计算机的六大部件
  • 中央处理器(CPU):控制+计算
  • 内存:程序运行时,临时存储数据
  • 输入设备:向计算机输入数据(键盘、扫码枪)
  • 输出设备:将计算机数据进行输出(显示器、打印机)
  • 外存储器:永久数据(文件)的存储(硬盘(键盘))
  • 网络:提供存储
计算机的工作原理
  • 存储程序
  • 程序控制
计算机的语言
  • 机器语言:最底层的语言,通常由0和1构成,直接作用于硬件
  • 汇编语言:充当翻译
  • 高级语言:C/C++,Java,Python,PHP,C#,GO

C语言简史与特点

在这里插入图片描述

C语言的起源
  • 其前身是B语言:

  • B语言是美国贝尔实验室的 Ken Thompson(肯·汤普森)于1969年开发出来的,并且用B语言编写了初版的UNIX系统

  • 1972年美国贝尔实验室的Dennis M. Ritchie(丹尼斯·M·里奇)在B语言基础上开发的C语言。C语言提供了丰富的数据类型和标识符,使得程序的编写变得非常高效和方便。

  • 1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了UNIX。

C语言的标准

为了C语言健康发展下去,很多有识之士及美国国家标准协会(ANSI)于1982年成立了一个委员会以确定C语言的标准。

  • 1989 ANSI 发布了第一个完整的C语言标准,即C89。不过人们习惯性的称为 “ANSI C”。

  • 1990年ISO(国际标准化组织一字不改的采纳了 C89,官方给出的名称为 ISO C90)。

  • 1999年,C语言标准经过了一次修正和完善后,ISO发布了新版的C语言标准,简称“C99”。

  • 2018年6月份发布的 “C18”GNU C 标准 (标准C的扩展) ,进一步增强了语言的稳定性和功能性。

  • 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899:2011,简称为“C11”。

  • “C23”是最新的标准,预计将进一步扩展C语言的功能和性能。

  • 应用于Linux 系统,当然Linux也支持标准C,因为标准C是跨平台的。

嵌入式开发就是针对Linux系统的开发,而Linux系统是使用C语言开发的,所以从事嵌入式开发要使用C语言。

C语言特点
  • C语言是一种强大而灵活的语言,可以用来编写任意复杂的程序。

  • C语言简洁、紧凑,使用方便。

  • C语言是可移植的。

  • C语言很适合结构化程序设计,因而要求用户以功能模块的方式来思考问题。

  • C语言可直接控制硬件 (位运算符,地址 )

  • 生成目标代码质量高,程序执行效率高,运行速度快。

C语言程序的开发过程

开发的三个步骤
  • 编辑:程序员向.c文件写入源文件(程序员
  • 编译:将源文件(.c)编译成可执行程序(二进制)(编译器
  • 运行:运行可执行程序(操作系统

在这里插入图片描述

C语言程序的编译过程

编译过程分为四个步骤:

  • 预处理 (#include拷贝代码 //注释删除) xxx.i
  • 编译 (将预处理后的文本文件翻译成汇编语言程序) xxx.s
  • 汇编 (将汇编语言程序翻译成机器语言指令,二进制) xxx.o
  • 链接 (链接库(eg:#include<stdio.h>))

在这里插入图片描述

C语言的基本结构

一个简单的C语言程序
  • 功能:要求在控制台输出"hello,world!"

  • 代码:

    /*************************************************************************
    > File Name:  demo01.c
    > Author:  FPD
    > Description:  输出 hello,world
    > Created Time:  2025年01月20日 星期一 10时53分39秒
    ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
    	printf("hello world!\n");
    	return 0;
    }
    
    // 格式化这里的代码:shift + tab
    

程序结构分析:

  • 注释:
    • 代码中起到解释说明的文字(提高代码的可读性),或者对代码进行屏蔽,注释不会被执行,它在预处理阶段就被删除了。
  • 预处理指令:
    • 程序中包含的某一文件内容(#include <stdio.h>
  • 主函数:
    • C程序的入口函数,一个C文件有且仅有一个主函数(main函数)
  • 函数首部(函数头)/函数说明
    • 说明函数类型,函数头有函数名和函数参数。举例:int main (int argc,char *argv[])
  • 函数体:
    • 包含变量说明和语句执行部分。举例:{..}
  • 函数调用语句:
    • 比如格式输出函数:printf(),输出“hello world!”

C语言编码规范要求

C语言在编码的时候,需要遵循如下规范:

  • 常见缩进书写格式(一般缩进2~4个字符,推荐4个字符,咱们使用的Linux默认就是4个)

  • 要有足够的注释(添加必要的注释,使代码更好理解)

  • 有合适的空行(一般预处理命令和函数之间、全局变量和函数、函数和函数之间…,使的代码结构更清晰)

  • {}对齐(C和C++中{}都需要独占一行,千万不要受到Java影响)

  • 函数体内采用分层缩进和模块化的书写方式。

  • 不把多条语句写在程序的同一行上。

  • 命名:变量或者函数命名要尽可能包含更多含义,但不能太长。

    举例 :学号:stu_id

    ​ 通过学号获取学生:get_stu_by_id()

C语言程序的设计特点

C语言程序在设计的时候,需要注意以下细节:

  • C程序由一个或者多个函数组成,但有且仅有一个主函数(main函数):main函数是程序的入口函数,可置于程序的任意位置,但是建议放在所有函数的最下面。

  • 程序中可以有预处理指令(如:#include指令)预处理指令通常在程序的最前面。

  • 每个语句以分号结尾:(预处理命令函数头函数、分支、循环后的花括号后面不能添加分号,否则报错。)

  • 函数体由一对花括号{}括起来

  • 包含在/…/内的文本为注释内容。

  • 一行可以写多个语句,一个语句也可以写在多行上。

    /*************************************************************************
    > File Name:  demo01.c
    > Author:  FPD
    > Description:  输出 hello,world
    > Created Time:  2025年01月20日 星期一 10时53分39秒
    ************************************************************************/
    
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
    	printf("hello world!\n");printf("hou feng\n"); // 不推荐
    	// 一行写多个语句
    	int a,b,c;// 推荐
    	int a = 3, b = 4, c = 5;// 推荐
        
    	// 一个语句写在多行上
    	while(1)
    	{
            
    	}
    	return 0;
    }
    // 格式化这里的代码:shift + tab
    

C语言中的注释

在C语言中,注释一般分为两类: 单行注释多行注释

注释的作用:给代码添加解释说明性文字,提升代码的可读性,注释本身是不会被执行。同时也可以使用注释屏蔽代码。

单行注释
  • 说明:单行注释使用双斜杠//..表示,我们一般用于常量、变量、函数调用等。

  • 语法:

    // 注释的内容
    
  • 范例:

    // 预处理指令,引入系统的标准的输入输出库(标准IO中的外设IO)
    #include <stdio.h>
    
    int main ()
    {
    	// 向控制台打印输出一句话
    	printf("hello,world!\n");
    	
    	return 0;
    }
    
多行注释
  • 说明:多行注释使用斜杠星花 /*..*/ 表示。它可以占用多行,但不能嵌套。我们一般用于函数,文件头说明等。

  • 语法:

    /*
    	要注释
    	的内容
    */
    
  • 范例:

    // 预处理指令,引入系统的标准的输入输出库(标准IO中的外设IO)
    #include <stdio.h>
    
    /*
    主函数
    */
    int main()
    {
    	// 向控制台打印输出一句话
    	printf("hello world!\n");
        
    	return 0;
    }
    

    注意:由多行注释衍生出一种更为细致的注释,我们称之为文档注释

  • 范例:

    /**
    * 主函数
    * @author 开发者
    * @param 参数
    * @return 返回值
    */
    int main()
    {
    	...
    }
    

数据类型

定义

数据类型其实是固定大小内存的别名,并且描述了一个变量存放什么类型的数据。简单来说,就是组织和操作数据。

数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音频、视频等)

  • 数据类型不仅帮助我们组织和操作数据,还决定了程序如何有效的利用内存。

  • 了解数据类型的内存需求是理解计算机管理和操作数据的关键。

    小贴士:

    ​ 程序的运行需要用到内存。

内存存储容量单位

字节(byte):计算机存储容量的一种单位(C语言中一般都是以字节为单位进行存储空间的计算),一般应用层最小存储单元的表示。

比特位(Bit):二进制数(0,1)计算机是以二进制的方式进行存储的,我们应用层可以通过位运算进行位的操作。

1Byte = 8Bit

1KB = 1024Byte

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

数据类型分类和计算方法

数据类型分类
  • 基本类型
    • 数值类型(C语言内置):
      • 整数:
        • 短整型:short(short int)
        • 基本型:int
        • 长整型:long(long int)
        • 长长整型:long long(long long int)
      • 浮点型:
        • 单精度型:float
        • 双精度型:double
        • 长双精度型:long double
    • 字符类型:char
  • 构造类型(用户自定义):
    • 结构体:struct
    • 联合体/共用体:union
    • 枚举类型:enum
  • 指针类型:*(解引用符)/&(取地址符)
  • 空类型:void
数据类型在内存中的大小
序号数据类型中文说明大小(字节)
1short短整型2
2int基本整形4
3long(long int)长整型4(32位编译器)/8(64位编译器)
4long long(long long int)长长整型8
5float单精度浮点型4
6double双精度浮点型8
7char字符型1
8bool(_Bool)布尔型,真-true,假-falsebool:1;true:4;false:4

注意:

​ 1.因为C语言没有Byte这个单位,所以我们一般使用char来表示字节,因为1char = 1byte

​ 2.C语言本身并没有提供布尔类型,但是后期提供了一个bool的库,从而让我们可以向使用其他语言一样使用bool

小贴士:

获取某个数据类型或者变量所占的字节数: sizeof(某个数据类型或者变量名)

printf("true size:%d\n",sizeof(true));    // true size:4 解释:true占4个字节,bool的底层是int
类型的0和非0
printf("false size:%d\n",sizeof(false));  // true size:4 解释:true占4个字节
printf("bool size:%d\n",sizeof(bool));    // bool size:1 解释:占1个字节

总结:

​ ① 数据类型在内存中所占的字节数跟C语言的编译系统有关。

​ ② 计算某个数据类型所占的字节数可以用sizeof。

​ ③ 布尔类型要添加 #include <stdbool.h> ,大家也可以使用int类型的0表示假,非0表示真。

校验各个数据类型在内存中的大小

在这里插入图片描述

常量于变量

在C语言中,数据的基本表现形式是常量和变量。不管是常量还是变量, 都是需要在内存中申请一块空间,用于数据的存放。

常量

  • 定义:在程序执行过程中其值不不能被改变的量。
  • 分类:int、float、double、char和符号常量
整型常量
  • 整型常量可以用十进制、八进制、十六进制三种形式表示。

    • 十进制常量:由0~9的数字组成,没有前缀,不能以0开头(举例:99,218,注意:0是可以的,但是09是不可以的)
    • 八进制常量:以0为前缀,其后由0~7数字组成,没有小数部分。(举例:023,077)
    • 十六进制常量:以0x或者0X为前缀,其后由数字0~9和字母A~F(大小写均可),没有小数部分。(举例:0x00FF0000)

    整型常量中的长整型数据可用 L或者l 作为后缀,(举例:long num = 123L)

  • 整型常量的分类

    • 有符号与无符号基本整型常量
    • 有符号与无符号长整型常量
    • 有符号与无符号短整型常量
  • 整形

    • 十进制表示:可以使用10个数字符号0~9以及 +,- ,如:123,-90
    • 八进制表示:以0开头,可以使用7个数字符号0~7以及 +,- ,如:0123,-011
    • 十六进制制表示:以0x或者0X开头,可以使用 0~9 以及 A~F(a~f) ,如:0x12,-0x12
浮点型常量

C语言中浮点数就是平常所说的实数(实型数),有两种表现形式:

  • 十进制小数形式:如:0.123,-17.8,0.123F
  • 指数形式(科学计数法),如:1.96e-5可以写作 1.96 ∗ 1 0 − 5 1.96 * 10^-5 1.96105,1230.0可以表示为 1.23 ∗ 1 0 3 1.23*10^3 1.23103,也可以表示为:1.23e3

注意:

​ ①在符号e的前面必须要有数字。

​ ②在符号e的后面必须为整数,不能是带有小数点的实数型。实型常量的后缀用F(或f)表示单精度型。后缀用L(或l)表示双精度型。

字符常量

用单引号''括起来的一个字符,如:‘a’、‘A’、‘4’、'_'等,比如:'齐’就不是字符,一个汉字所占的字节数超过1个字符。中文符号当成汉字理解。英文输入法下输入的字母、数字、符号都是单字符

序号字符形式含义ASCII码
1\n换行10
2\r回车13
3\0空字符0
4\t水平制表符9
字符串常量

说明:在C语言中,是支持字符串常量的,但是不支持字符串变量。字符串变量需要使用字符数组或者字符指针实现。

  • 用一对双引号""括起来的一个字符序列,如:"How do you do?

    yuyuan!",“YueQian”,“12”,“true”,"12.25"等。

  • 可以输出一个字符序列,如:printf(“%s”,“hello world\n”); | printf(“hello world\n”);

注意:

字符常量=='a’与字符串常量"a"==的区别:

在这里插入图片描述

系统自动为字符串常量加上结尾的 \0 ,使所占内存单元多一个,单字符常量的长度不变,可用sizeof()运算符来测量。

符号常量

定义一个表示符来代表一个常量。

如:用PI代表圆周率π,即:3.1415926

  • 好处:

    • 增加可读性
    • 增强了可维护性
  • 定义字符常量:

    • 用编译预处理指令 #define

    • 格式:

      #define 标识符 字符串
      
      • 标识符和字符串之间用空格隔开
      • 句末不用分号
      • 标识符的命名采用大写,如果有多个单词,使用下划线分隔,举例:MAX_VAL,MIN_VAL
    • 规范:

      /*************************************************************************
      > File Name: demo01.c
      > Author: FPF
      > Description: 输出 hello,world
      > Created Time: 2025年01月20日 星期一 10时53分39秒
      ************************************************************************/
      
      #include <stdio.h>
      
      // 定义一个符号常量PI
      #define PI 3.1415926
      #define R 20
      
      int main(int argc,char *argv[])
      {
      	// 计算圆周长 2×PI×R
      	printf("计算圆周长:%f\n",2*PI*R);
      	// 计算圆面积 PI*R*R
      	printf("计算圆面积:%f\n",PI*R*R);
      	return 0;
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值