入门篇包括:
- C语言的历史
- VS2019的安装
- 第一个C语言程序
- 数据类型
- 变量、常量
- 字符串+转义字符+注释
- 选择语句
- 循环语句
- 函数
- 数组
- 操作符
- 常见关键字
- define定义常量和宏
- 指针
- 结构体
目录
1.C语言的历史
C语言是一门通用的,模块化,程序化的编程语言,被广泛应用于操作系统和应用软件的开发。由于其高效和可移植性,适应于不同硬件和软件平台,深受开发员的青睐。C语言源KenThompson发明的B语言,因此命名为C语言。
![查看源图像](https://i-blog.csdnimg.cn/blog_migrate/97280c446e50a646139e0150a67c6657.png)
1978年,丹尼斯·里奇与布莱恩·科尔尼干一起出版了名著《C程序设计语言(The C Programming Language)》。此书被誉为c语言的圣经。随着C语言的发展,各厂商对C语言进行“定制”,衍生出许多“方言”,使得C语言可移植性大大降低。于是在ISO和ANST的合作下,制定了“ANSI C”标准(又称C89)。后来 ANSI 把这个标准提交到 ISO,1990年被 ISO 采纳为国际标准,称为 ISO C(又称C90)。ANSI C(C89) 与 ISO C(C90)内容基本相同,所以对于C标准,可以称为ANSI C,也可以说是ISO C,或者 ANSI / ISO C。
注意:以后大家看到 ANSI C、ISO C、C89、C90,要知道这些标准的内容都是一样的,且是现在主流的C语言标准。
C语言对C++和Java等后来产生的许多编程语言都产生了直接或间接的影响。
2.集成开发环境——VS2019的安装
参考视频教程:
3.第一个C语言程序
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
运行结果:
代码详细解释:
(1)#include
是一个编译预处理命令,声明了在程序编译之前要预先处理的内容。
(2)#include <stdio.h>
称为文件包含命令,括号中的内容称为头文件或首文件。好比借用别人的东西需要向别人打个招呼,调用C语言内置的函数也要向C语言“打个招呼”,即包含一下头文件。printf函数是C语言的内置函数,包含在头文件stdio.h中;本行代码的作用是声明本段代码已包含库函数stdio,后续可直接调用。
(3)int main()
本行代码的作用是声明main函数有一个整型返回值。在执行程序时,会从main函数头开始执行,然后进入main函数体执行其中的代码块,即main函数表示程序的入口部分。int称为关键字,该关键字代表的类型是整型。
(4)结构体部分
一个函数通常分为两部分:一是函数头,二是函数体。代码程序的3~6行就构成了函数体,其中第4行是要执行的内容。
(5)printf(" ");
为格式化输出函数,可以实现在屏幕上打印" "中的内容。
注意:语句结尾需要添加分号。
(6)return 0;
可以理解为main函数的结束标志,返回一个整型常量0。
4.数据类型
C语言的基本数据类型如下:
char 字符类型数据
short 短整形
int 整型
long 长整型
long long 更长的整型
float 单精度浮点型
double 双精度浮点型
存在这么多数据类型,目的是可以更方便的表达生活中的各种值。每种类型大小可以用sizeof来测试。
注意:sizeof是一个关键字,是C语规定的具有特定意义的字符串,以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
sizeof计算的结果单位是字节。计算机中的内存单位如下:
5.变量、常量
5.1变量
(1)定义
顾名思义,变量用来描述生活中那些可变的量,如年龄,薪资等。
(2)分类
(3) 变量的作用域和生命周期
作用域:就是变量起作用的范围,即限定变量可用性的代码范围。
生命周期:变量的创建到销毁的一个时间段。
5.2 常量
(1)定义
生活中那些不变的值,如圆周率,身份证号码,邮政编号等。
(2)类型
6.字符串+转义字符+注释
6.1字符串
(1)定义
由双引号引起来的一串字符称为字符串。
(2)结束标志
\0
注意:
- 在计算字符串长度时,\0是结束标志,不算做字符串内容
- \0在内存中是占据位置的
(3)理解'\0'D的重要性
(4)文章推荐
6.2转义字符
(1)定义
顾名思义,转变它原来的意思。在一个字符前家=加‘\’使得=它具有其他的意思。
(2)一些转义字符:
转义字符 | 释义 |
---|---|
\' | 用于表示字符常量‘ |
\" | 用于表示一个字符内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解析成一个转义序列符 |
\a | 蜂鸣 |
\b | 退格符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1-3个八进制的数字。 |
\xdd | dd表示2个十六进制数字 |
(3)解释后两项:
![](https://i-blog.csdnimg.cn/blog_migrate/020a7225d8714662a9942190deece006.png)
举例说明:
(4)求strlen时
在计算字符串长度时,转义字符的长度均为一个字符:
注意:八进制中不可能出现数字8,所以8不算在转义字符之内!!!
6.3注释
- 不需要的代码可以直接注释掉。
- 在需要说明之处加上注释文字,增强代码可读性,便于理解。
7.选择语句
8.循环语句
9.函数
我们在初中就已经了解到函数的概念,其表征的是变量之间的一种对应关系。而在C语言中,函数是一个独立的功能,用于实现特定的操作,方便代码复用。
举例:
ADD就是一个函数,用于实现两个整型的相加,并返回相加得到的结果。
10.数组
(1)定义
int arr[10]={1,2,3,4,5,6,7,8,9,10};
(2)访问
通过下标进行数组的访问,下标从0开始。
11.操作符
![](https://i-blog.csdnimg.cn/blog_migrate/55ee3ce0c6d5ef00f52c2fbbcf9bfd78.png)
12.常见关键字
12.1C语言中的关键字
12.2简单解释
数据类型关键字(12个)
(1) char:声明字符型变量或函数
(2) double:声明双精度变量或函数
(3) enum:声明枚举类型
(4) float:声明浮点型变量或函数
(5) int:声明整型变量或函数
(6) long:声明长整型变量或函数
(7) short:声明短整型变量或函数
(8) signed:声明有符号类型变量或函数
(9) struct:声明结构体变量或函数
(10) union:声明联合数据类型
(11) unsigned:声明无符号类型变量或函数
(12) void:声明函数无返回值或无参数,声明无类型指针
控制语句关键字(12个)
循环语句
(1) for:一种循环语句
(2) do:循环语句的循环体
(3) while:循环语句的循环条件
(4) break:跳出当前循环
(5) continue:结束当前循环,开始下一轮循环
条件语句
(1) if:条件语句
(2) else:条件语句否定分支
(3) goto:无条件跳转语句
开关语句
(1) switch:用于开关语句
(2) case:开关语句分支
(3) default:开关语句中的“其他”分支
返回语句
(1)return:子程序返回语句
存储类型关键字(4个)
(1) auto:声明自动变量,所有局部变量都是auto形的,所以一般不使用
(2) extern:声明变量是在其他文件正声明(也可以看做是引用变量)
(3) register:声明寄存器变量
(4) static:声明静态变量
其他关键字(4个)
(1) const:声明只读变量
(2) sizeof:计算数据类型长度
(3) typedef:用于给数据类型取“别名”
(4) volatile:说明变量在程序执行中可被隐含的改变
12.3文章推荐
关键字系列——C语言32个关键字
13.#define定义常量和宏
13.1定义常量
(1)说明
我们最常使用到的#define的用法就是用#define来定义一个符号常量,而要修改时,只需修改#define这条语句即可。
(2)示例
#include<stdio.h>
#define PI 3.14
#define STR "圆周率约等于"
int main()
{
printf("%s %f",STR,PI); //预处理时会被替换为 printf("%s %f","圆周率约等于",3.14);
return 0;
}
运行结果:
13.2定义宏
(1)说明
宏是在C预处理阶段的一种文本替换工具。
(2)示例
#include<stdio.h>
#define ADD(x,y)((x)+(y))
int main()
{
int sum = ADD(2, 5);
printf("sum=%d", sum);
return 0;
}
运行结果如下:
14.指针
14.1内存
(1)定义
- 内存是电脑中特别重要的存储器,计算机中程序的运行都是在内存中实现的。
- 为有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元大小是一个字节。
- 为有效访问内存单元,就给内存单元进行了编号,这些编号就被称为内存单元的地址。计算机在访问数据时,会先找到它的地址,再来获取改地址里的数据。
(2)图示
变量是创建在内存中的,是在内存中为其分配空间的,所以变量也是有地址的。
(3)示例
#include<stdio.h>
int main()
{
int num = 10;
#//&为取地址符号,取出num的地址;
//num是一个整型变量,占四个字节,每个字节都有地址,取出的是第一个字节的地址
printf("%p\n", &num);//%p是用来打印地址的
return 0;
}
运行结果如下:
14.2指针变量
(1)定义
前面我们谈到了,每一个变量都都地址,那么如何存储地址呢?就要引入指针变量的概念。指针变量就是专门用来存储指针的变量!如定义一个指针变量p,p是一个指向int型数据的指针,即p可以存int型变量的地址。在表示指针变量,需要用到解引用操作符 * 。
int *p;
这里,p是地址,而*p就是所在地址的对象,我们可以通过*p间接访问数据;int表示p指向对象的类型为整型。
(2)示例
#include<stdio.h>
int main()
{
int a = 15;
int *p = &a;
printf("直接访问,a=%d\n", a);
printf("间接访问,a=%d\n", *p);
return 0;
}
运行结果如下:
(3)应用
可以通过*p去改变a的值 ,示例如下:
对应关系:
(4)指针变量的大小
指针变量多大?取决于地址的存放需要多大的空间。我们用sizeof来测试指针变量的大小。
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(double*));
return 0;
}
运行结果如下:
结论:指针大小在32位平台上是4个字节,在64位平台上是8个字节。
*注意:一个内存单元是一个字节,而管理这个内存单元的编号(指针)是四个字节。
14.3结构体
(1)定义
在实际问题中,一组数据往往有很多种不同的数据类型。例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄,char型的性别,float型的成绩。又例如,对于记录一本书,需要 char型的书名,char型的作者名,float型的价格。在这些情况下,使用简单的基本数据类型甚至是数组都是很困难的。而结构体(类似Pascal中的“记录”),则可以有效的解决这个问题。
结构体本质上还是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同,也可以是基本数据类型或者又是一个构造类型。
(2)初始化
#include<stdio.h>
struct Stu
{
char name[20]; //名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
int main()
{
struct Stu s = { "张三",19,"男","20411070505" };
//访问结构成员并打印
printf("name=%s age=%d sex=%s id=%s\n", s.name, s.age, s.sex, s.id);
return 0;
}
#include<stdio.h>
struct Stu
{
char name[20]; //名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
int main()
{
struct Stu s = { "张三",19,"男","20411070505" };
struct Stu * ps = &s;
//访问结构成员并打印
printf("name=%s age=%d sex=%s id=%s\n", ps->name, ps->age, ps->sex, ps->id);
return 0;
}
上面两种访问方式,运行结果均为:
此C语言之初识,完结!