C语言学习之函数知识总结

目录
  • 前言
  • 一、引入
  • 二、认识函数
  • 三、函数的作用
  • 四、函数的返回值
  • 五、定义函数
  • 六、函数的类型
  • 七、return语句与break语句的区别
  • 八、函数的分类
  • 九、主函数
  • 十、函数使用举例
  • 十一、函数的声明
  • 十二、函数的形参与实参
  • 十三、合理设计函数
  • 十四、变量的作用域
  • 十五、函数内存的分配

前言

函数是C语言的基本单位,学好函数有利于程序的模块化以及避免写出重复的代码从而减少代码量,并且可以提高程序的复用性与可读性。

一、引入

引例:定义6个整型变量a,b,c,d,e,f,并对它们任意赋值。分别输出a,b的最大值,c,d的最大值和e,f的最大值

#include <stdio.h>

int main()
{
    int a, b, c, d, e, f;

    a = 5, b = 3, c = 6, d = 87, e = 12, f = 49;

    if (a > b)
        printf("%d\n", a);
    else if (a < b)
        printf("%d\n", b);

    if (c > d)
        printf("%d\n", c);
    else if (c < d)
        printf("%d\n", d);

    if (e > f)
        printf("%d\n", e);
    else if (e < f)
        printf("%d\n", f);

    return 0;
}

通过观察可以发现,代码中有大量重复的部分,如果我们定义一万个变量,并两两比较求出其中的最大值,那么if...else if...else语句就要写一万次,这显然非常累赘。在编程过程中,经常会发现,虽然数据不一样,但是对这些数据的操作却是一样的,例如,引例中求a,b中的最大值与求c,d的最大值所做的操作是一样的,唯独只有被操作的数据不同而已。所以如果程序中有大量重复的作操,但只是针对的数据不一样时,我们可以通过定义函数来解决代码重复的问题。上述引例可以通过如下代码实现对应的功能:

#include <stdio.h>

void get_max(int i, int j) // 自定义的求最大值的函数
{
    if (i > j)
       printf("%d\n", i);
   else if (i < j)
       printf("%d\n", j);
   else
       printf("Equal!\n");
}

int main()
{
    int a, b, c, d, e, f;

    a = 5, b = 3, c = 6, d = 87, e = 12, f = 49;

    get_max(a, b);
    get_max(c, d);
    get_max(e, f);

    return 0;
}

二、认识函数

void表示该函数没有返回值,get_max是该函数的名字,函数名后括号中的变量i和j被称为该函数的形式参数(简称形参)。

void get_max(int i, int j)
{
    if (i > j)
       printf("%d\n", i);
   else if (i < j)
       printf("%d\n", j);
}

所有的语言程序的入口都是main函数,从main函数进入则开始顺序逐行执行main函数中的代码。下面代码块中定义完变量并完成赋值后,程序执行到get_max(a, b);,此时程序便会从main函数的上方查找一个名叫get_max函数并将括号中的变量a和b的值分别传输到get_max函数名后括号中的形参i和j中,然后程序会跳转到get_max函数的内部执行,待get_max函数执行完毕后,再跳转回main函数继续执行main函数中的下一条语句。

int main()
{
    int a, b, c, d, e, f;

    a = 5, b = 3, c = 6, d = 87, e = 12, f = 49;

    get_max(a, b);
    get_max(c, d);
    get_max(e, f);

    return 0;
}

三、函数的作用

函数是一种工具,它是能够完成特定功能的独立代码块,它不是为某个特定的问题设计的,而是为解决大量同类型的问题设计的;虽然函数处理的数据是不同的,但是对这些数据的操作是相同的;函数的使用可以避免写大量重复的代码,减少程序员的编码量;同时函数的存在有利于整个程序的模块化,函数可以将复杂的问题剖解为一个个简单的问题;函数可以被视为一个“黑匣子”,我们只需要知道某个函数的用法即可使用该函数,但我们并不一定知道该函数是怎么实现的,例如,我们虽然经常使用的printf函数,但我们并不知道其中到底是如何实现输出功能的。同样的,当我们编写函数的时候,也可以把具体实现的过程隐藏起来,因为这可能是商业机密。

四、函数的返回值

函数不仅可以接收数据,并对接收到的数据进行处理,而且也可以将数据处理的结果返回,例如下述程序:

#include <stdio.h>

int f(void) // int表示函数的返回值是int类型的值;括号中的void表示该函数不能接收任何数据
{
    return 10; // return语句表示向主调函数返回一个值
}

int main()
{
    int i = 88;

    i = f(); // 调用f函数后,f函数就会返回10这个数据,所以这行代码就相当于把10赋值给变量i

    printf("%d\n", i);

    return 0;
}

思考:下述程序是否正确?

#include <stdio.h>

void g(void) // 函数名前的void表示该函数没有返回值
{
}

void h(void)
{
	return 10; // 编译时如果没有调用该函数,则不会报错,一旦调用便会报错,因为h函数的返回值为空
}

int main()
{
    int i = 88;

    i = g(); // 由于g函数没有返回值,所以不能将其赋值给变量i,编译时会报错

    printf("%d\n", i);

    return 0;
}

五、定义函数

六、函数的类型

函数返回值的类型也称为函数的类型,如果函数名前的返回值类型与函数执行体中的return表达式的返回的类型不同,则最终函数返回值以函数名前的返回值类型为准。

思考:下述程序输出的结果是多少?

#include <stdio.h>

int f() // 如果函数名后的括号里是空的,等同于在括号里写void
{
	return 10.5;
}

int main()
{
	double x = 6.6;

	x = f();

	printf("%lf\n", x);

	return 0;
}

通过程序可得,变量x输出的值为10.000000,这就说明,函数最终的返回值与函数名前的返回值类型相同,而不是以return表达式为准。所以,函数的类型取决于函数名前的返回值的类型。

七、return语句与break语句的区别

break语句的作用是终止当前循环和switch语句,而return语句与break语句有本质性的差别,return语句的作用是终止当前正在执行的函数。当被调函数的返回值为空时,则直接终止被调函数然后跳回主调函数继续顺序执行主调函数中的代码;如果被调函数的返回值不为空时,则先将返回值返回给主调函数,然后再终止被调函数并跳回主调函数继续顺序执行主调函数中的代码。

思考:以下两个程序的输出结果是否相同?如果不同,这两个程序的输出结果分别是什么?

#incldude <stdio.h>

void f()
{
	for (i = 0; i < 5; i++)
	{
		printf("AAAA\n");
		break;
	}
	printf("BBBB\n");
}

int main()
{
	f();

	return 0;
}
#incldude <stdio.h>

void f()
{
	for (i = 0; i < 5; i++)
	{
		printf("AAAA\n");
		return;
	}
	printf("BBBB\n");
}

int main()
{
	f();

	return 0;
}

八、函数的分类

根据是否有形参可以将函数分为,有参函数和无参函数;根据是否有返回值可以将函数分为有返回值函数和无返回值函数;同时,也可以将函数分为库函数和自定义函数,例如,printf函数就属于库函数,因为是系统提供给我们的,而这篇文章中的get_max函数,f函数,g函数等均属于自定义函数。

九、主函数

不管一个程序中有多少个函数,但主函数(也就是main函数)只能有一个,并且main函数是整个程序的入口,也是整个程序的出口,主函数可以调用任何其他函数,其他函数之间也可以互相调用,但是其他函数不能调用主函数。

十、函数使用举例

定义6个整型变量a,b,c,d,e,f,并对它们任意赋值。分别输出a,b的最大值,c,d的最大值和e,f的最大值

要求:自定义函数并且不能与引例中的函数执行体相同

#include <stdio.h>

int get_max(int i, int j)
{
    if (i > j)
        return i;
    else if (i < j)
        return j;
}

int main()
{
    int a, b, c, d, e, f;

    a = 5, b = 3, c = 6, d = 87, e = 12, f = 49;

    printf("%d\n", get_max(a, b));
    printf("%d\n", get_max(c, d));
    printf("%d\n", get_max(e, f));

    return 0;
}

输入三个int类型的数字,并判断这三个数字是否是素数。如果是素数输出Yes,如果不是输出No

要求:使用自定义函数实现

提示:素数(又称质数)是大于1的自然数并且素数只能被1和它本身整除

#include <stdio.h>

int is_prime(int val)
{
	int i;

	for (i = 2; i < val; i++)
		if (val % i == 0)
			break;

	if (i == val)
		return 1;
	else
		return 0;
}

int main()
{
	int val1, val2, val3, i;

	scanf("%d%d%d", &val1, &val2, &val3);

	if ( is_prime(val1) )
		printf("Yes!\n");
	else
		printf("No!\n");

	if ( is_prime(val2) )
		printf("Yes!\n");
	else
		printf("No!\n");

	if ( is_prime(val3) )
		printf("Yes!\n");
	else
		printf("No!\n");

	return 0;
}

十一、函数的声明

观察可以发现,文章中所有自定义的函数都放在了main函数之上,那我们如果将自定义的函数放在main函数的下面会出现什么情况呢?如果我们在main函数中调用了自定义函数,并且将自定义的函数放在了main函数的下方,此时整个程序就会编译报错,这是因为main函数执行到调用自定义函数的语句时,它只会向上查找对应的函数,而如果在它上面没有对应的函数,程序就会出错。

思考1:下面两个程序是否可以运行?

#include <stdio.h>

int main()
{
	f();

	return 0;
}

void f()
{
	printf("AAAA\n");
}

那如果我们要把被调函数放在主调函数之后,我们应该怎么办呢?这需要在主调函数的上方加上函数声明即可,如下程序所示:

#include <stdio.h>

void f(); // 这是函数声明,后面的分号不可以省略

int main()
{
	f();

	return 0;
}

void f()
{
	printf("AAAA\n");
}

思考2:下面的程序是否可以运行?如果有错误应该如何改正?

#include <stdio.h>

void g(void)
{
	f();
}

void f(void)
{
	printf("AAAA\n");
}

int main()
{
	g();

	return 0;
}

十二、函数的形参与实参

形参是指定义函数时括号中定义的变量,而实参是指在调用函数时向被调函数传输的具体的数据或变量。如下代码所示,变量i就是形参,而主函数中调用f函数时在后面的括号中写的5就是实参。需要注意的是,形参和实参的个数必须是对应的,数据类型也必须相互兼容。

#include <stdio.h>

void f(int i)
{
	printf("%d\n", i);
}

int main()
{
	f(5);

	return 0;
}

十三、合理设计函数

在掌握了以上知识之后,我们该如何设计函数让整个程序更像是开发软件?答案很简单,如果仅需要使用一次某个功能,则不需要将该功能设计成一个函数,但如果需要多次使用该功能,则设计一个该功能对应的函数是不二选择。这段话通过以下三个程序体会:

示例:输入一个int类型的数字n,求1到n之间(包括n)所有的素数并输出。不考虑输入的值小于等于1的情况

解法1:不定义其它函数,仅在main函数中实现

#include <stdio.h>

int main()
{
	int n;
	int i, j;

	scanf("%d", &n);

	for (i = 2; i <= n; i++)
	{
		for (j = 2; j < i; j++)
			if (i % j == 0)
				break;

		if (j == i)
			printf("%d\n", i);
	}

	return 0;
}

这样写程序虽然实现了功能,但代码的重用性非常低,比如,我们要分别判断100个不同数字从1到它本身之间的所有素数,则需要将下面的代码块重复写100次,这样就会导致代码大部分是重复的,而且代码量会显得非常大。

for (i = 2; i <= n; i++)
{
	for (j = 2; j < i; j++)
		if (i % j == 0)
			break;

	if (j == i)
		printf("%d\n", i);
}

考虑到要将1到n之间所有的数字都进行判断素数这一操作,所以可以单独设计出一个函数实现判断素数这个功能,从而解决代码重复的问题。

解法2:自定义一个函数实现

#include <stdio.h>

int is_prime(int val)
{
	int i;

	for (i = 2; i < val; i++)
		if (val % i == 0)
			break;

	if (i == val)
		return 1;
	else
		return 0;
}

int main()
{
	int n;
	int i;

	scanf("%d", &n);

	for (i = 2; i <= n; i++)
		if ( is_prime(i) )
			printf("%d\n", i);

	return 0;
}

相比较第一个程序,该程序更容易让人理解,代码的可重用性也得以提高,并且多次判断时所需要写的代码也相对较少,但存在的问题与第一个程序相同,如果要分别判断100个不同数字从1到它本身之间的所有素数,则需要将下面的代码块重复写100次。

for (i = 2; i <= n; i++)
    if ( is_prime(i) )
        printf("%d\n", i);

又考虑到判断完是否是素数后,输出也是重复性操作,所以同样可以将输出这一操作通过设计函数来实现。

解法3:自定义两个函数实现

#include <stdio.h>

// 本函数的功能是判断val是否是素数
int is_prime(int val)
{
	int i;

	for (i = 2; i < val; i++)
		if (val % i == 0)
			break;

	if (i == val)
		return 1;
	else
		return 0;
}

// 本函数的功能是将1到n之间(包括n)所有的素数输出
void traverse(int n)
{
	int i;

	for (i = 2; i <= n; i++)
		if ( is_prime(i) )
			printf("%d\n", i);
}

int main()
{
	int n;
	int i;

	scanf("%d", &n);
	traverse(n);

	return 0;
}

第三个程序相较前两个程序而言,代码量更少,且可重用性更高,如果需要判断多个数字并输出的话,只需要多次调用traverse函数即可实现功能,而且整个程序更容易让人理解。

总结:一个函数的功能尽可能独立单一,不要将多个功能放在一个函数中实现,这样不仅可以避免代码的重复而且还可以增加整个程序的可重用性与可读性。

十四、变量的作用域

变量按作用域划分可以分为全局变量和局部变量。

全局变量

在所有函数外部定义的变量被称为全局变量。如下程序所示,变量k就是一个全局变量,需要注意的是,全局变量只能在定义全局变量的位置之后的函数中使用,在全局变量之上的函数不能使用。

#include <stdio.h>

int k = 10;

void f()
{
	printf("%d\n", k);
}

int main()
{
	f();

	return 0;
}

局部变量

在函数内部定义的变量,以及函数的形参都属于局部变量。如下程序所示,f函数中的形参i以及f函数中定义的变量j都是f函数的局部变量,main函数中定义的变量i也是main函数的局部变量。除此之外,初学时可能会有这样的困惑:f函数中定义了i变量,main函数中也定义了i变量,这样程序是否存在问题?答案是不存在问题的,因为main函数中变量i只在main函数中发挥作用,而f函数中的变量i只在f函数中发挥作用,所以它们并不会起冲突,也就意味着,所有的局部变量只能在函数的内部使用,这也正是局部变量的含义。

#include <stdio.h>

void f(int i)
{
	int j = 20;
}

int main()
{
	int i = 10;

	return 0;
}

全局变量名与局部变量名冲突的问题

#include <stdio.h>

int i = 99;

void f(int i)
{
	printf("i = %d\n", i);
}

int main()
{
	f(8);

	return 0;
}

推测1:程序中有错误,因为全局变量名与局部变量名一样,无法分辨f函数中到底是全局变量i还是局部变量i

推测2:程序无误,如果输出结果为99,则此时的变量i是全局变量;如果输出结果为8,则此时的变量i是局部变量

结果:输出结果为8

结论:如果全局变量名与局部变量名相同,则局部变量会屏蔽全局变量的存在

十五、函数内存的分配

在使用函数之前,操作系统会给函数中所有的变量分配内存空间,但当函数被执行完毕后,其中所有变量的内存均会被释放掉,等到再次使用时,会重新给函数中的变量分配内存空间。大家可以思考一下这样做的合理性。

以上就是C语言学习之函数知识总结的详细内容,更多关于C语言 函数 的资料请关注我们其它相关文章!

(0)

相关推荐

  • C语言从零探索函数的知识

    目录 一.初探程序中的函数 二.深入浅出函数调用 三.函数定义细节剖析 四.函数参数深度剖析 五.编写函数对数组排序 六.变量的作用域与生命期(上) 七.变量的作用域与生命期(下) 八.函数专题练习 九.递归函数简介 一.初探程序中的函数 函数的概念 函数是具有特定功能的程序部件(可当黑盒使用) 函数有明确的使用方式(固定输入对应固定输出) 函数在程序中可重复使用(程序中的工具) 函数的类型 数据处理(数据→数据) 通过某种规则将 x处理成 y,如: y = 2x +1 过程定义(数据→功能)

  • C语言浅析函数的用法

    目录 问题引入 函数 C语言中函数的语法形式 问题 例子 函数的调用过程 函数声明 变量声明 数组声明 问题引入 有时候,我们经常需要在一个程序中,对一个数组进行 键盘输入,打印数组元素值. 有些代码块,功能是相同的,只有数组名和元素个数等参数不一样, 代码形式是一样的,对于同一功能而不同参数的代码块,那么咱就可以 将其封装成一个函数,如果您需要用到这样的功能或者代码块,那么我们 就不需要重复的去写代码块,我们只需要调用这个函数. 函数 函数是完成某个功能的指令序列的封装. 函数有什么特点: 相

  • C语言超全面讲解函数的使用方法下

    目录 一.函数的嵌套调用 二.函数的链式访问 三.函数递归 递归的优缺点 必要条件 使用场景 函数递归的细节说明 举例说明 对两个必要条件的理解 四.递归练习 C语言超全面讲解函数的使用方法上 一.函数的嵌套调用 在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数. ️注意: 函数可以嵌套调用但是不可以嵌套定义. 每一个函数都应该在大括号的外面独立存在. 代码示例: 根据这张图可以清楚的看到,three_line() 函数

  • C语言超全面讲解函数的使用方法上

    目录 一.函数的分类 1.库函数 2.自定义函数 3.库函数的分类 二.函数调用 1.传值调用 2.传址调用 三.函数的声明 四.函数定义 五.函数的参数 1.形式参数(形参) 2.实际参数(实参) 六.函数的练习 C语言超全面讲解函数的使用方法下 一.函数的分类 1.库函数 库函数是C语言基础库为了方便程序员进行软件开发而提供了一系列的函数,可以支持可移植性和提高程序的效率. ️ 注意:库函数需要引头文件. 例如:strlen函数的头文件是<string.h> 2.自定义函数 自定义函数和库

  • C语言超细致讲解函数递归

    目录 前言 什么是递归 递归的两个必要条件 题解递归 递归与迭代 练习题 结束语 前言 最近被函数递归困恼许久,今天就带领大家一起探秘递归. 什么是递归 程序调用自身的编程技巧称为递归( recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解, 递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量. 递归的主

  • C语言深入了解函数

    目录 1. 函数的概念 2. 函数的分类 从定义角度分 从参数角度分类 从返回值角度分 3. 函数的定义 4. 函数的声明 5. 函数的调用 6. 递归函数 1. 函数的概念 函数是c语言的功能单位,实现一个功能可以封装一个函数来实现. 定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值. 函数就是将特定功能的代码封装在一个函数内部,当使用这些代码时,只需要调用函数即可. 2. 函数的分类 从定义角度分 库函数(即函数是谁实现的) 自定义函数 系统调用(操作系统实现的函数) 从参数角

  • C语言深入讲解函数的使用

    目录 关于函数 1. 函数的定义形式 2. 函数的声明 3. 返回语句 4. 函数参数 4.1 形式参数(传值调用) 4.2 实际参数(传址调用) 4.3 无参数 5. 函数的调用 5.1 嵌套调用 5.2 函数递归 总结: 关于函数 函数是C语言的基本单元,函数中包含实现程序功能的代码. C语言程序的入口位于main()函数之中,为了方便组织配合,调试和运行,一般是用main函数作为主调函数,通过调用其他的函数来实现程序的运行. 他们的关系图如下: 1. 函数的定义形式 先给大家看看完整的函数

  • C语言学习之函数知识总结

    目录 前言 一.引入 二.认识函数 三.函数的作用 四.函数的返回值 五.定义函数 六.函数的类型 七.return语句与break语句的区别 八.函数的分类 九.主函数 十.函数使用举例 十一.函数的声明 十二.函数的形参与实参 十三.合理设计函数 十四.变量的作用域 十五.函数内存的分配 前言 函数是C语言的基本单位,学好函数有利于程序的模块化以及避免写出重复的代码从而减少代码量,并且可以提高程序的复用性与可读性. 一.引入 引例:定义6个整型变量a,b,c,d,e,f,并对它们任意赋值.分

  • C语言学习之指针知识总结

    目录 一.地址 二.指针与指针变量 三.指针的作用 四.初学指针时常见的错误 五.通过调用函数修改主调函数中的值 六.指针与一维数组 七.使用函数操作一维数组 八.指针变量所占字节数 九.静态数组的缺陷 十.malloc函数 十一.动态数组的构造 十二.静态内存与动态内存的对比 十三.多级指针 十四.跨函数使用内存 一.地址 内存中的最小单元是字节,一个字节对应一个编号,这里的编号就是对应字节的地址.换句话说,地址就是内存单元的编号. 二.指针与指针变量 指针与指针变量是两个不同的概念,指针是某

  • Go语言学习之函数的定义与使用详解

    目录 1.函数定义 2.多值返回 3.引用传递 4.函数作为实参使用 5.匿名函数 1.函数定义 函数的定义和java一样,使用{}进行包裹,并且要明确入参类型以及返回类型. 样例代码如下: func min(num1, num2 int) int { if num1 <= num2 { return num1 } else { return num2 } } func main() { fmt.Printf("max = %d\n", min(10, 12)) } 执行结果 m

  • R语言学习Rcpp基础知识全面整理

    目录 1. 相关配置和说明 2. 常用数据类型 3. 常用数据类型的建立 4. 常用数据类型元素访问 5. 成员函数 6. 语法糖 6.1 算术和逻辑运算符 6.2. 常用函数 7. STL 7.1. 迭代器 7.2. 算法 7.3. 数据结构 7.3.1. Vectors 7.3.2. Sets 7.3.3. Maps 8. 与R环境的互动 9. 用Rcpp创建R包 10. 输入和输出示例 如何传递数组 通过.attr("dim")设置维数 函数返回一维STL vector 函数返回

  • 深入学习C语言中的函数指针和左右法则

    通常的函数调用     一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; } void MyFun(int x) //这里定义一个MyFun函数 { printf("%d\n",x); } 这个MyFun函数是一个无返回值的函数,它并不完成

  • C语言编程中函数的基本学习教程

    C 语言中的函数等价于 Fortran 语言中的子程序或函数,也等价于 Pascal 语言中的过程或函数.函数为计算的封装提供了一种简便的方法,此后使用函数时不需要考虑它是如何实现的.使用设计正确的函数,程序员无需考虑功能是如何实现的,而只需知道它具有哪些功能就够了.在 C 语言中可以简单.方便.高效地使用函数.我们经常会看到在定义后仅调用了一次的短函数,这样做可以使代码段更清晰易读. 到目前为止,我们所使用的函数(如 printf.getchar 和 putchar 等)都是函数库中提供的函数

  • 学习不同 Java.net 语言中类似的函数结构

    前言 函数式编程语言包含多个系列的常见函数.但开发人员有时很难在语言之间进行切换,因为熟悉的函数具有不熟悉的名称.函数式语言倾向于基于函数范例来命名这些常见函数.从脚本背景衍生而来的语言倾向于使用更具描述性的名称(有时是多个名称,包含多个指向同一个函数的别名). 在本期文章中,我将继续探讨 3 种重要函数(过滤.映射和缩减)的实用性,展示来自每种 Java 下一代语言的实现细节.文中的讨论和示例旨在减轻 3 种语言对类似函数结构使用的不一致名称时可能引起的混淆. 过滤 在过滤 函数中,您可指定一

  • R语言学习笔记之lm函数详解

    在使用lm函数做一元线性回归时,发现lm(y~x+1)和lm(y~x)的结果是一致的,一直没找到两者之间的区别,经过大神们的讨论和测试,才发现其中的差别,测试如下: ------------------------------------------------------------- ------------------------------------------------------------- 结果可以发现,两者的结果是一样的,并无区别,但是若改为lm(y~x-1)就能看出+1和

  • Go语言学习之时间函数使用详解

    目录 引言 1. 时间格式化 2. 示例 引言 1946年2月14日,人类历史上公认的第一台现代电子计算机“埃尼阿克”(ENIAC)诞生. 计算机语言时间戳是以1970年1月1日0点为计时起点时间的.计算机诞生为1946年2月14日,而赋予生命力时间是从1970年1月1日0点开始. Hour 1小时=60分钟 Minute 1分钟=60秒 Second 1秒=1000毫秒 Millsecond 1毫秒=1000微秒 Microsecond 1微秒=1000纳秒 Nanoseco 1纳秒 1. 时

  • Go语言学习函数+结构体+方法+接口

    目录 1. 函数 1.1 函数返回值 同一种类型返回值 带变量名的返回值 函数中的参数传递 函数变量 1.2 匿名函数——没有函数名字的函数 在定义时调用匿名函数 将匿名函数赋值给变量 匿名函数用作回调函数 可变参数——参数数量不固定的函数形式 1.3 闭包 1.4 defer语句 处理运行时发生的错误 1.5 宕机恢复(recover)——防止程序崩溃 2. 结构体 2.1 定义与给结构体赋值 3. 方法 3.1 结构体方法 3.2 接收器 指针接收器 非指针类型接收器 4. 接口 4.1 声

随机推荐