C语言入门(初识C语言)
C语言入门(初识C语言)
- 前言
- 什么是C语言?
- 为什么选择C语言?
- 计算机语言的发展
- 高级计算机语言中的经典:C语言
- 初识C语言(正片开始)
- 一.第一个C语言程序(你好,C语言)
- 1.1 #include
- 1.2 int main()
- 1.3 printf
- 1.4 return 0
- 1.5 小结
- 二.C语言数据类型
- 三.C语言中的常量与变量
- 3.1 常量
- 3.2 变量
- 四. 转义字符和字符串
- 4.1 转义字符
- 4.2 字符串
- 4.3 注释
- 五. 选择语句
- 六. 循环语句
- 七. 函数
- 7.1 自定义函数
- 7.2 C语言库函数
- 八. 数组
- 8.1 数组的定义
- 8.2 数组的下标
- 九. C语言中的操作符
- 9.1 算术操作符
- 9.2 移位操作符,位操作符,赋值操作符
- 9.3 其他操作符
- 十. 常见关键字
- 10.1 typedef
- 十一. #define 定义常量和宏
- 十二. 指针
- 十三. 结构体
- 总结
前言
嘿嘿,当你点进这篇文章时,我想你一定对编程感兴趣,并且准备迈出学习它的第一步了吧?那么就让我们开始吧!编程是一件非常有趣的事情,希望你能够一直保持积极的心态面对它。我们就从C语言开始入门吧。接下来我将讲解C语言的基础知识。
什么是C语言?
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易
的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语
言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的
C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超
级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制
定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8
日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标
准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉
字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
为什么选择C语言?
在明白为什么选择C语言之前,我们需要先了解一下计算机语言的发展历史
计算机语言的发展
一. 机器语言
第一代计算机语言称为机器语言。机器语言就是 0/1 代码。计算机只能识别 0 和 1。在计算机内部,无论是一部电影还是一首歌曲或是一张图片,最终保存的都是 0/1 代码,因为 CPU 只能执行 0/1 代码。那么这是不是就意味着我们编程一定要用 0/1 代码呢?
首先这么编写肯定是可以的,但是这样太麻烦,而且很不好理解,所以后来就出现了汇编语言。
二. 汇编语言
汇编语言就是将一串很枯燥无味的机器语言转化成一个英文单词。比如说:add 1, 2;
add 就是一个英文单词,这样看起来就稍微有一些含义了,即 1 和 2 相加。这个就是汇编语言。
如果直接用机器语言编写的话,这几乎是无法实现的。因为用机器语言太难记忆了,也没人能看得懂。所以后来就设计出了第二种语言,即将 0/1 代码翻译为英文单词,这些英文单词直接对应着一串 0/1 指令。这个就是汇编语言。
通过专门的软件就可以将这些英文单词转化成 0/1 代码并由计算机执行,这种专门起翻译的作用的软件叫作编译器。
这些英文单词和与它们对应的 0/1 代码之间的对应关系,以及语言的语法,在编写这个软件的时候就已经写在里面了。我们只要通过编译器就可以将这些都转化成 0/1 代码。这样大大方便了我们对程序的编写。
三. 高级语言
汇编语言之后又出现了第三代语言。第三代语言又叫“高级语言”。高级语言的发展分为两个阶段,以 1980 年为分界线,前一阶段属于结构化语言或者称为面向过程的语言如C语言、FORTRAN语言,后一阶段属于面向对象的语言,如C++、Python、、Java、C#等。
面向过程语言中最经典、最重要的就是C语言。C语言一直在用,因为C语言是计算机领域最重要的一门语言。但是C语言也有缺陷,它的缺陷只有在学完面向对象语言之后才能体会到。
高级计算机语言中的经典:C语言
C语言自上世纪70年代初诞生直到现在,凭借着它语言简洁、紧凑,使用方便、灵活 ;运算符丰富,语言的运算符包含的范围广泛;数据类型丰富;具有结构化的控制语句;程序设计自由度大;编写的程序可移植性好;代码质量高,程序执行效率高的特性,在最新的计算机语言排行榜上依然排进前三名。可见,C语言是一款经久不衰的语言。
数据来源:TIOBE网站
一直有一句话这样说:C语言乃是万物之本。所以我们从C语言开始学习是非常不错的选择。
那么,让我们开始C语言的学习吧!
初识C语言(正片开始)
一.第一个C语言程序(你好,C语言)
#include <stdio.h>int main()
{printf("Hello,World!\n");printf("Hello,C!\n");return 0;
}
程序运行结果如下:
看上去是不是很简单呢?现在就让我来介绍一下这些代码吧!
1.1 #include
include我们将它称为文件包含命令,它的作用就是将<>或者" "中的的文件包含到程序中。而stdio.h就是前面所说的“文件”,它的全名叫standard input output,“.h”是后缀名,表示它是一个头文件。那么这段代码的意思就是将stdio.h文件包含到本程序中。我们这里就先把它记住,以后的程序开头就以这个格式写上去就行了。
1.2 int main()
main函数(也叫主函数),是程序的入口,这里也是一样的,我们记住这个标准格式就行,在main函数下面有一对{}号,我们的代码就写在{}里面。需要注意的是,一个工程里只能有一个main函数!
1.3 printf
printf叫做格式化输出函数,用法就是将你想要输出的内容放入(" ")中,比如上面我们写的Hello,World!
当想要输出某个字符类型时,需要以这种格式打印 printf("数据类型\n",变量名);
,比如我已经定义了一个整型变量a,现在我想将它打印出来,那么就这样写:printf("%d\n",a);
你注意到了吗,我们在输出函数内容时,会添加一个**\n**,它是换行符,效果就是将光标移动到下一行。我们试着将上面写的代码去掉\n
#include <stdio.h>int main()
{printf("Hello,World!");printf("Hello,C!");return 0;
}
打印结果如下
这样你肯定理解了吧!
1.4 return 0
表示主函数返回的值为0,我们先记住这个格式,先不做深入了解。
1.5 小结
以上就是一个C语言程序的主要内容。我们以后写代码时就按照这个格式来写吧。有一些知识我们不必咬文嚼字,只需大概了解就行了,不会影响我们写程序的。
二.C语言数据类型
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
这些是C语言的基本数据类型,如果想知道每一种数据类型所占空间的大小(单位是字节),我们可以使用sizeof运算符:
#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;
}
程序打印结果:
三.C语言中的常量与变量
我们之前说了,编程可以用于解决生活中的问题。而生活中的事物有变化的也有不变的。
3.1 常量
常量:C语言中的常量就可以理解为不变的量,比如生活中的血型、性别、圆周率等。
- 字面常量
字面常量的意思就是已知的值,比如100,50等。 - const修饰的常变量
这是未用const修饰的变量:
使用const修饰过后:
这里我们还想修改a的值时,编译器报错了。这里我们解释如下:被const修饰过后的变量具有了常属性,其值不能再改变。 注意:a只是具有了常属性,但是它本质上还是一个变量。可以用数组的定义来证明:
- #define定义的标识符常量:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。可以理解为编译器在预编译时将符号替换成常量的数值。举个例子吧:
在代码的第八行,MAX就是#define 定义的标识符常量,在预编译时,MAX会被替换成10。
- 枚举常量:可以一一列举出来的常量,C语言中使用enum关键字定义枚举常量。举例:
#include<stdio.h>
enum Sex
{MALE,FEMALE,SECRET,
};
int main()
{printf("%d\n", MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);return 0;
}
运行结果:
3.2 变量
- 变量的定义方法:
#include <stdio.h>
int main()
{int a = 10;float b = 6.66;char c = 'a';printf("a=%d\n", a);printf("b=%f\n", b);printf("c=%c\n", c);return 0;
}
程序运行结果:
- 变量的分类
在C语言中变量有两类,局部变量和全局变量。
全局变量: 指在一个程序中对整个代码都有效的变量,定义在main函数之外。注意:由于全局变量的特性,我们甚至可以在一个工程中,跨文件使用同一个全局变量,所以它是很不安全的,一般情况下不建议使用。
局部变量: 指定义在{}内部的变量,它只在该区域内起作用。当一个程序中同时定义了相同名字的全局变量和局部变量时,采用局部优先的原则。举例:
- 变量的使用
变量的使用很简单,与生活中的数学不计较相似。这里我们以写一个可以计算两个整数相加减的程序为例子吧
#include<stdio.h>int main()
{int num1 = 20, num2 = 10;int sum = 0, sub = 0;sum = num1 + num2;sub = num1 - num2;printf("num1 + num2 = %d\n", sum);printf("num1 - num2 = %d\n", sub);return 0;
}
程序运行结果:
- 变量的作用域和生命周期
四. 转义字符和字符串
4.1 转义字符
转义字符其实我们早就见过了 printf("Hello world!\n");
这一段代码中的\n
就是一个转义字符,它叫换行符。
除了\n
,C语言中还有许多其他的转义字符:
感兴趣的话可以自己在代码中尝试。
4.2 字符串
字符串就是由" "
引起的内容,我们其实也见过它了, printf("Hello world!\n");
中的Hello world就是字符串。其中字符串最重要的一个知识点就是它的结束标志 ‘\0’。
看看以下代码:
#include<stdio.h>int main()
{char str1[] = { 'H','e','h','e','\0' };char str2[] = { 'H','e','h','e' };char str3[] = "Hehe";printf("%s\n", str1);printf("%s\n", str2);printf("%s\n", str3);return 0;
}
程序运行结果:
可见,字符串的结束标志为’\0’,在C语言中以char str[]="Hehe";
定义字符串,会在最后自动加上’\0’。而如果以char str1[] = { 'H','e','h','e','\0' };
这个形式定义字符串的话,切记要手动添加一个\0。否则打印出来的会是随机值,因为编译器只找\0,找到了\0它就认为字符串结束了,否则就会一直打印,直到内存中出现了\0。
4.3 注释
当我们写的程序越来越复杂时,定义了很多的变量,如果没有注释的话,我们过一段时间再回来读程序的时候会十分困难;或者是当我们写错了程序时,但是又不行删除写的代码,也可以用到注释。C语言提供了两种注释风格:
- C语言的注释风格:/* xxxxxx*/
缺点:不能嵌套注释 - C++的注释风格://xxxxx
既可以注释一行,也可以注释多行
五. 选择语句
生活中我们经常会遇到选择的问题, 举一个例子:我们该好好学习吗?接下来就该选择了,如果好好学习,就会得到一个好工作,否则,就没有好工作,回家卖红薯。 接下来,我们用图解和代码的形式把这段话描述出来。
#include <stdio.h>int main()
{int i = 0;printf("请选择: (1.好好学习,0.摆烂)\n");scanf("%d", &i);if (i == 1){printf("好offer!高薪资!\n");}else{printf("回家卖红薯。。。\n");}return 0;
}
程序运行结果:
C语言中的选择语句有if,else语句和switch语句,这里我们先介绍if,else语句。
六. 循环语句
生活中有很多事情需要我们日复一日的去做,这就是循环。C语言中提供了三种循环语句,while、for、do…while。
这里我们先介绍while循环。举一个例子:我们学习编程,每天写代码,当代码量达到一万行时就拿到好offer。接下来我们用C语言描述一下它:
#include <stdio.h>int main()
{int i = 0;while (i<10000){printf("%d行\n", i);i++;}printf("写了一万号代码了,得到好offer!\n");return 0;
}
七. 函数
7.1 自定义函数
在我们写代码的过程中,一个功能可能会用到很多次(比如计算两个数的和),那么我们可以把这一段代码模块化,以后想计算两个数的和时,就不需要自己重新写一遍这个代码了,直接调用这个函数就可以。接下来我们用两个模式写这段代码,第一个是一般写法,第二个是写成函数的形式。
- 一般写法
#include <stdio.h>int main()
{int num1 = 0, num2 = 0;int sum = 0;printf("请输入两个整数: \n");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("sum = %d\n", sum);return 0;
}
- 写成函数
#include <stdio.h>
int Add(int x, int y)
{int sum = x + y;return sum;
}
int main()
{int num1 = 0, num2 = 0;int sum = 0;printf("请输入两个整数: \n");scanf("%d %d", &num1, &num2);sum = Add(num1, num2);printf("sum = %d\n", sum);return 0;
}
程序运行结果(两个代码的结果是一样的):
函数的特点就是可以简化代码,并且提高代码复用能力。
7.2 C语言库函数
说到库函数,我们不应该陌生,在前面写到的printf
就是C语言中的一个库函数,格式化输出函数。需要注意的是:在使用库函数之前,必须包含其头文件,比如我们想使用printf
函数,就包含了stdio.h
头文件。
想要了解更多的库函数,可以访问C++官网:cppreference.com
库函数的简单分类:
八. 数组
如果要连续存多个数据,该如何存?
C语言中给了数组的定义:一组相同类型元素的集合
8.1 数组的定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
8.2 数组的下标
如果我们要找到数组中的某个元素,比如第i
个元素,我们直接写arr[i]
可以吗?
注意了,这个写法是错误的!
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
如果数组10个元素,下标的范围是0-9
如果想打印该数组,需要用到循环,请看代码:
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;while (i < 10){printf("arr[%d] = %d\n", i, arr[i]);i++;}return 0;
}
程序运行结果:
九. C语言中的操作符
9.1 算术操作符
就是数学中的算术运算符:+,-,*,/,%。其中需要额外注意的是除法运算和%取模运算。请看代码:
9.2 移位操作符,位操作符,赋值操作符
- 移位操作符
>>(右移操作符), <<(左移操作符),作用分别是将目标的数值转换成二进制后,对二进制进行移位。举例:
右移操作符也是同理 - 位操作符:
&按位与 |按位或 ^按位异或
这三个都是进行的二进制位操作,这里我们先认识一下,之后进阶再介绍。
-赋值操作符
= += -= *= /= &= ^= |= >>= <<=
拿+=举例子吧,比如 a+=10;
这段表达式我们翻译一下就是a=a+10;
其他的也是同理的。
9.3 其他操作符
单目操作符 | 作业 |
---|---|
! | 逻辑反操作 |
- | 取负 |
+ | 取正 |
& | 取地址 |
sizeof | 求操作数的类型长度(单位是字节) |
~ | 对一个数的二进制按位取反 |
- - | 前置、后置- - |
++ | 前置、后置++ |
* | 解引用操作符 |
(数据类型) | 强制类型转换‘ |
项目关系操作符 | 作用 |
---|---|
> | 测试大于 |
< | 测试小于 |
>= | 测试大于等于 |
<= | 测试小于等于 |
== | 测试等于 |
!= | 测试不等 |
- 逻辑操作符
&&:逻辑与;
||:逻辑或。 - 条件操作符
exp1 ? exp2 : exp3;
举例:
- 逗号表达式
格式:exp1, exp2, exp3, …expN
- 下标引用、函数调用和结构成员
[] () . ->
十. 常见关键字
C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。
我们先介绍几个,之后的慢慢了解。
10.1 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
举例子:
十一. #define 定义常量和宏
请看例子:
十二. 指针
在了解指针之前,我们得先了解一下内存
什么是内存?
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
如何取出变量的地址呢?
我们之前讲到的&
操作符就是干这个的:
如果我们想把&a,即a的地址存起来该怎么做呢?
这时指针就是我们想要的工具了。
#include <stdio.h>
int main()
{int a = 10;int* pa = &a;printf("%p", pa);return 0;
}
注意:不同类型变量的地址,应该用与之相对应的指针来存储。
到这了,我们不难发现,其实指针本质上就是也是一种变量,只不过是专门用来存储地址的。
那么变量应该也有大小吧?
我们不妨用sizeof试试?
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{printf("%d\n", sizeof(char *));printf("%d\n", sizeof(short *));printf("%d\n", sizeof(int *));printf("%d\n", sizeof(double *));return 0;
}
这里我用的平台是32位的,所以指针变量的大小是四个字节,如果在64位平台下,指针变量的大小就是八个字节了。
十三. 结构体
我们生活中的事物是很复杂的,想要正确的描述他们,我们可能只靠数字和字符。比如描述学生,我们得说出他的名字、性别、年龄、班级等等。那么如何用C语言来描述呢?那就让我来介绍一下结构体吧!
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
举例,描述一个学生,包括姓名,学号,年龄,性别。
struct Stu
{char name[20];//名字int age; //年龄char sex[5]; //性别char id[15]; //学号
};
结构体的初始化:
struct Stu s = {"张三", 15, "男", "2021213158"};
接下来我们来试试使用结构体(两种方法):
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
程序输出结果:
总结
好啦,以上就是初识C语言的全部内容了。认真看完的话,我们应该就可以看懂别人写的代码了。最好呢是能够自己动手写一写代码。我给大家推荐几个刷题的网站吧:牛客网 | 力扣 | PTA
这是我的第一篇博客,肯定有很多不成熟的地方,希望大家多多评论提建议,感谢!
之后的博客应该会定期发布一些进阶知识和题目的讲解,希望大家到时候可以一起讨论,一起进步!
C语言入门(初识C语言)相关推荐
- C语言入门——初识C语言
C语言入门--初识C语言 一. C语言的起源 二. 选择C语言的原因 (一). 设计特性 (二). 高效性 (三). 可移植性 (四). 强大而灵活 (五). 面向程序员 (六). 缺点 三. C语言 ...
- go语言视频教程_ go语言入门视频教程_go语言实战视频教程
许多人可能知道go语言的优点在哪里,但他们不知道go语言适合在哪里使用.通过学习go语言视频教程,可以清楚的知道go语言主要用于服务器端开发,其定位是用来开发"大型软件".学习go ...
- 入门C语言模板,C语言入门经典-C语言编程
C语言入门经典-C语言编程Tag内容描述: 1.第01章C语言编程,C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让 ...
- c语言编程培训ppt,C语言入门经典-C语言编程.ppt
<C语言入门经典-C语言编程.ppt>由会员分享,可在线阅读,更多相关<C语言入门经典-C语言编程.ppt(27页珍藏版)>请在人人文库网上搜索. 1.第01章 C语言编程,C ...
- c语言入门经典doc,C语言入门经典C语言编程.ppt
C语言入门经典C语言编程.ppt 第01章 C语言编程,C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序即一组指令,并让计算机依指令行事 ...
- 编程入门c语言ppt,C语言入门经典-C语言编程.ppt
<C语言入门经典-C语言编程.ppt>由会员分享,可在线阅读,更多相关<C语言入门经典-C语言编程.ppt(27页珍藏版)>请在装配图网上搜索. 1.第01章 C语言编程,C语 ...
- 【零基础入门C语言】 初识C语言—1
声明:[零基础入门C语言]系列是博主对B站up主:鹏哥C语言所分享教学内容的学习笔记,并且该系列每篇博客都会将博主听课后总结的纸质版笔记附于文末,供大家参考. 初识C语言章节的内容在于初步了解C语言的 ...
- c语言入门数组,C语言入门之数组(2)
二维数组 前面介绍的数组只有一个下标,称为一维数组, 其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的, 因此C语言允许构造多维数组.多维数组元素有多个下标, 以标识它在数组中的位置, ...
- 【C语言】初识C语言(下篇)
如果这世界上真有奇迹,那只是努力的另一个名字. 大家好,这里是anduin.今天将给大家带来初识C语言的最后一部分,和之前一样点到为止,适当补充,今天的内容是#define 定义常量和宏.指针和结构体 ...
- 【C语言】初识C语言(中篇)
种一棵树,最好的时间是10年前,其次是现在. 大家好,这里是anduin,这次的主题依旧是初识C语言,和上次不同,这次我们主要讲两大块,对于一些知识,我们选择略讲,但是对于一些我觉得重要的知识我会对其 ...
最新文章
- php遍历文件夹下文件内容_PHP遍历某文件夹下的文件与文件夹名
- oracle 工具:tkprof
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
- python导入txt为dataframe-python读取文本中数据并转化为DataFrame的实例
- Winform开发框架之插件化应用框架实现
- 初学Windows编程笔记1——窗口和消息
- 如何成为一个卓越的程序员
- ABAP动态生成经典应用之Table数据Upload 程序
- 设计模式之迭代子模式
- 2008 r2彻底删除 server sql_mysql添加列、删除列,创建主键、备份等常用操作总结...
- RabbitMQ Network Partitions
- window 服务器不稳定,服务器Windows系统突发情况的解决办法
- 《如何搭建小微企业风控模型》第十节 单变量分析(下)节选
- Command line is too long. Shorten command line for Doc.generateAsciiDocs or
- 豪赌激光电视,海信算是赢了吗?
- 国际贸易基础(六)外贸流程
- Word 中自动设置匹配章、节序号的标题
- 常用网络命令:ping命令的使用
- 离线浏览工具webdup 可下载网站页面
- java大学生网上请假系统ssm框架
热门文章
- 课程学习:Linux系统管理
- 利用Python获取某游戏网站热销商品并用pands进行Excel数据存储
- 熱銷商品查詢php,ecshop首页调用指定商品分类下推荐热销最新商品
- java 新浪 发送邮件_发邮件时终于可以通过sina的smtp验证了
- NIR近红外光谱简介
- 调研分析:全球与中国多媒体投影仪镜头市场现状及未来发展趋势
- 微生信在线绘制KEGG Pathway通路分类汇总图
- web端 刷卡器_在WEB浏览器使用IC卡读卡器的几种方案的对比
- 运用Python+Pygame开发坦克大战游戏_版本V1.01
- 【Visual C++】游戏开发笔记二十五 最简化的DirectX开发环境的配置