内容提要:C语言概念、数据类型
C语言概述
计算机基础
计算机的组成
- 计算机:能进行计算已经逻辑处理的设备
- 组成计算机的物理部件。(内存条、CPU、磁盘)
开发中对于硬件的认知:
硬件包括电子设备、单片机、集成电路和嵌入式系统等。
- 软件:计算机中运行的程序和数据
开发中对于软件的认知:
软件分为系统软件(OS)、应用软件和编程工具(编译器)
计算机的六大部件
- 中央处理器(CPU):控制+计算
- 内存:临时存储运行时的数据。
- 输入设备:
- 输出设备:将计算机
- 外存储器:永久存储数据(硬盘)
- 网络:数据传输于通信
计算机的工作原理
- 存储程序:程序和数据存储在内存中
- 程序控制:CPU按指令顺序执行
计算机的语言
- 机器语言:二进制代码,直接控制硬件
- 汇编语言:助记符形式,需要汇编器翻译
- 高级语言:C/C++ ,Java,Python,PHP,C#,GO
C语言的简史于特点
C语言的起源
-
其前身是B语言;
-
B语言是美国贝尔实验室的 Ken Thompson(肯·汤普森)于1969年开发出来的,并且用B语言编 写了初版的UNIX系统
-
1972年美国贝尔实验室的Dennis 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语言程序开发的过程(重点)
开发的三个步骤
1.编程:编写源代码(.c
文件,程序员完成)
2.编译:将源代码文件转换为可执行文件(编译器完成)
3.运行:执行程序(操作系统加载)
C语言程序的编译过程
注意:本章节只是做一个简单的概念了解,后续章节详细展开
上面提到的编译,实际上分为了四个步骤:
1.预处理:处理宏和头文件以及注释等
**2.编译:**生成汇编代码
**3.汇编:**转换为机器码、二进制代码(.o
文件)
**4.链接:**合并库文件和目标文件
测试代码:
/*************************************************************************
> File Name: demo01.c
> Author: FPF
> Description:
> Created Time: 2025年04月28日 星期一 10时21分06秒
************************************************************************/
#include <stdio.h>
// 定义宏
#define PI 3.14
int main(int argc,char *argv[])
{
printf("hello world!\n");
double area = PI * 2 * 2;
return 0;
}
编译命令
编译步骤 | 命令 | 文件类型 | 说明 |
---|---|---|---|
预处理 | gcc -e *.c -o *.i | * . c →* . i | 生成的是C代码(文本) |
编译 | gcc -s *.c -o *.s | * . i →* . s | 生成的是汇编代码(文本) |
汇编 | gcc -c *.c -o *.o | * . s →* . o | 生成的是二进制代码(文本) |
连接 | gcc *.c -o* | 生成的是二进制代码(文本) |
C语言的基本结构
一个简单的C语言程序
功能:要求在控制输出“hello world”
代码:
/*************************************************************************
> File Name: demo01.c
> Author: FPF
> Description:
> Created Time: 2025年04月28日 星期一 10时21分06秒
************************************************************************/
#include <stdio.h>
// 主函数
int main(int argc,char *argv[])
{
printf("hello world!\n");
return 0;
}
程序结构分析:
-
注释:解释代码逻辑,写给程序员自己看,预处理阶段会被删除;
-
预处理指令:程序中包含的某一个文件内容(
include <stdio.h>
); -
主函数:
main
函数是程序唯一的入口,一个文件中最多有1个,这个函数不能被其他函数调用,这个是自动执行函数是通过这个函数指针进行访问的 -
关于函数:
-
函数头:(函数首部或函数说明)
说明函数类型,函数头由函数名和函数参数构成。
-
函数体:
包含变量说明和语言执行
-
-
函数调用语句:比如(printf)
C语言编程的规范要求
C语言在编程的时候,需要遵循如下规范:
-
常用的缩进格式(一般缩进)(一般缩进2~4个字符,推荐缩进4个字符,vim默认是缩进8个字符,我们目前 使用的模板是缩进4个,也就是一个Tab键)
-
要有足够的注释(添加必要的注释,使代码更好理解)
-
有合适的空行(一般预处理命令和函数之间,函数和函数之间,全局变量和函数之间…,加空行 提高代码可读性,使代码结构更清晰)
/************************************************************************* > File Name: demo01.c > Author: FPF > Description: > Created Time: 2025年04月28日 星期一 10时21分06秒 ************************************************************************/ #include <stdio.h> #define PI 3.14 #define R 2 int fun() { printf("A\n"); } // 主函数 int main(int argc,char *argv[]) { printf("hello world!\n"); return 0; }
-
{}
对齐(C和C++中{
和}
都需要独占一行,千万不要受JAVA的影响)
JAVA
int fun(){
...
}
c/c++
int fun()
{
...
}
- 函数体采用分层缩进和模式化书写方式。
int fun()
{
if(...)
{
for(...)
{
printf("hello\n");
}
}
if (...)
{
for(...)
{
printf("hello world\n");
}
}
}
-
不要把多条语句的同一行上(最好区分就是,不要在同一行出现连个以上的分号;for循环
(;;)
除外)int main() { // 错误写法(不影响编译,但是影响阅读) printf("hello"); printf("hello"); printf("hello"); // 错误写法(不影响编译,但是影响阅读) int a = 10; int b = 20; // 错误写法(不影响编译,但是影响阅读) for(..) {} }
-
标识符命名要见名知义。
int main() { // 创建三个变量,用来存储年龄、身高、体重 // 错误写法(不影响编译,但是影响阅读 int a = 21; int b = 168; int c = 190; //正确写法 int age = 21; int height = 168; int weight = 190; }
C语言程序设计特点
C语言程序在设计的时候,需要注意以下细节:
- C程序有一个或多个函数组成,但有且仅有一个main函数;这个函数是程序的入口函数,可以置于程序的任意位置,建议放在所有函数的最下面。
- 程序中可以有预处理指令(如:
#include、#define
),预处理指令通常放在程序的最前面。 - 每个语句以分号结尾:(
预处理指令
,函数头
,函数头、分支、循环体后的花括号
,后面不能添加分号,否则会报错) - 函数体由一对
{}
括起来,{}
是不能省略的。 - 包含在
/*..*/
内,或//..
后面的温拌为注释内容,在预处理阶段删除 - 一行可以写多个语句,一个语句可以写多在多行上。
int main()
{
//一行写多个语句
int a,b,c;
//一个语句写在多行
while(1)
{
...
}
}
//格式化笔记中代码:shift + tab
C语言中的注释
在C语言中,注释一半分为两类:单行注释和多行注释。
注释的作用:给代码添加解释说明性文集,提升代码的可读性,注释本身不参与编译,在预处理阶段会被删除,我们同时也会使用注释屏蔽掉暂时不需要的代码。
单行注释
说明:单行注释使用双斜杠//..
表示。我们一般用于变量、常量、函数调用语句等。
语法:
//需要注释的内容
范例:
//预处理指令,引入系统的标准输入输出库
#include <stdio.h>
int main()
{
//向控制台打印输出 hello world
printf("hello world!\n");
return 0;
}
多行注释
说明:多行注释使用斜杠星花/*..*/
表示。它可以占用多行,但不能嵌套。我们一般用于函数,文件说明等。
语法:
/*要注释的内容*/
/*
要注释的内容
*/
范例:
/*
主函数
*/
int main()
{
...
}
注意:由于多行注释衍生出一种更为精致的注释,我们称之为文档注释
范例:
/**
*主函数
*@author 开发者
*@param 参数1 说明
*@param 参数2 说明
*@return 返回值
*/
int main()
{
...
}
数据类型
定义
数据类型其实就是固定大小的别名,并且描述了一个变量存放什么类型的数据。简单来说,就是组织和操作数据。
数据:计算机要处理的数据(数字、字符串、文字、图片、音频、视频等)
- 数据类型不仅帮助我们组织和操作数据,还决定了程序如何有效利用内存。
- 了解数据类型的内存需求是理解计算机管理和操作数据的关键
小贴士:程序运行需要在内存中
数据类型分类和计算方法
数据类型的分类(重点)
- 基本类型(C语言内置)
- 数值类型
- 整型(整数)
- 短整型:short(short int缩写)
- 基本型:int(使用最多)
- 长整型:long(long int缩写)
- 长长整型:long long(long long int缩写)
- 浮点型(小数、实数)
- 单精度型:float
- 双精度型:double
- 长双精度型:long double(C99新增)
- 整型(整数)
- 字符型:char
- 数值类型
- 构造类型(用户自定义)
- 结构体:shruct
- 联合体/共用体:union
- 枚举类型:enum
- 指针类型
- 空类型:viod(C语言内置)
数据类型在内存中大小(重点)
序号 | 数据类型 | 中文说明 | 大小(字节) |
---|---|---|---|
1 | short(short int) | 段类型 | 2 |
2 | int | 基本类型 | 4 |
3 | long (long int) | 长类型 | 4(32位系统)/8(64位系统) |
4 | long long(long long int,C99新增) | 长长类型 | 8 |
5 | float | 单精度浮点型 | 4 |
6 | double | 双精度浮点型 | 8 |
7 | char | 字符型 | 1 |
8 | bool(Bool,C99新增) | 布尔型,true-真, | bool:1,true(1):4,false(0):4 |
注意:ture
和false
是宏定义,实际值是1
和0
注意:
小贴士:
获取某个数据类型或者
printf ("true size:%\n",sizeof(true)); //trus size:4 解释:true本身就是int类型的1,所以占4个字节 printf ("bool size:%\n",sizeof(ture)); // bool size:1 解释:占1个字
总结:
①数据类型在内存中所占的字节数跟C语言的编译系统有关。
②计算某个数据类型所占字节数可以用sizeof运算符。
③布尔类型要添加 #include <stdbool.h>
,大家也可以直接使用int类型的0和1来表示布尔类型。