堆积木与编程.
起初我们最开始的时候,不同的积木可以理解成导线,电池,电源.
我们用这样的积木堆积程序.
并且还堆积出了非门,与门,或门.
所以,我们多了几种积木,这几种积木,叫做非门,与门,或门.
后来我们又用这几种积木,堆积出了各种加法器,控制器,振荡器,触发器.
又用这些积木堆积出了内存,硬盘,CPU,显示器.
最后又用这些积木堆积出了,机器语言.
又用机器语言堆积出了汇编语言.
又用汇编语言堆积出了C语言.
用C语言堆积出了函数.
后面的课程还会继续抽象下去...
抽象的层次越高,每一个积木实现的功能越多,背后的复杂度也越高.
现在我们就可以理解成,一个函数就是一个积木.
不同的函数组合相当于不同的积木组合在一起,形成形形色色的风格.
也可以说,这是一个不断抽象的过程.
当然,操作系统也是一个非常庞大的程序,也为我们抽象出了很多概念.
现代的计算机编程语言和操作系统是互动的,息息相关.
以前的计算机程序员对计算机的工作原理和工作方式了如指掌.
计算机体系中的硬件、软件、编译器以及操作系统之间的关系简单而透明.
所以那个时候,把握计算机的整体细节和全局认识,不是太难.
而现代的计算机技术非常复杂,层层抽象的过程太多,想要一眼了解这种内在的关联非常非常的难.
计算机科学领域大多数基本思想和技术都被隐藏在众多抽象接口的层面之下了.
这种复杂性导致了无法避免的结果,领域专业化.
这就使得多门计算机科学领域应用而生,而每一个领域只涵盖某个学科中的某一个方面.
#include<stdio.h>
#include<stdlib.h>
void
main() {
printf("起床
");
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
void 函数一()
{
printf("吃饭
");
}
void 函数二()
{
printf("睡觉
");
}
void main()
{
printf("起床
");
system("pause");
}
全局变量直到程序退出.
局部变量直到函数被调用完毕退出.
全局变量和局部变量不要重名.
C语言编译器生成汇编语言的时候,从上往下开始编译.
这也是被调用的函数必须在调用函数的上面声明.
把一个常用的功能独立抽象出来,写成一个函数,就可以被同一个程序或者其他程序重复使用.
单独做了一个积木.
函数可以分为有返回值和没有返回值,有参数或者没有参数.
形式参数和实际参数
形参或者实参
可变参数函数的实现.
#include<stdio.h>
#include<stdlib.h>
int add(int length,...) {
int *l_v1 = &length;
l_v1++;
int l_sum=0;
for (size_t i = 0; i < length; i++)//可变参数的实现
{
l_sum = l_sum + *l_v1;
*l_v1++;
}
return l_sum;
}
void main() {
add(5, 1, 2, 3, 4, 5);
printf("%d
", add(5, 1, 2, 3, 4, 5));
system("pause");
}
include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
int add(int length, ...) {
va_list l_p = 0;
va_start(l_p, length);
int l_sum = 0;
for (size_t i = 0; i < length; i++)
{
l_sum = l_sum + va_arg(l_p, int);
}
return l_sum;
}
void main() {
add(5, 1, 2, 3, 4, 5);
printf("%d
", add(5, 1, 2, 3, 4, 5));
system("pause");
}