03C语言中的函数

31 篇文章 9 订阅
订阅专栏

C语言中存在着大量的库函数,所谓库函数就是C语言已经给我们写好的函数,当然我们也可以自定义函数。这些函数和我们数学中的函数类似,都是为了实现某一功能而被设计出来。本章我们将了解一下这些函数,由于库函数较多,库函数的实现将再以后单独开篇博客来讲。



一、C语言中的库函数

在C语言中,有一些功能是我们在日常中频繁会使用到的,因此为了提高开发效率,C语言将这些功能封装成了库函数。比如我们日常用的scanf和printf操作,都是库函数。使用库函数必须引用库函数所在的头文件。
更多的库函数可以通过下面的网站获取:

cplusplus.com

我们经常使用到的库函数有:

  • IO函数

输入和输出函数

  • 字符串操作函数

比如求字符串长度的strlen函数

  • 字符操作函数

比如判断字符的大小写,将小写字母转化为大写字母

  • 内存操作函数

内存复制、查找等操作

  • 时间/日期函数

获取时间等

  • 数学函数

开平方sqrt等函数

  • 其他库函数

1.库函数如何使用

以我们常用的strcpy库函数为例:

该库函数属于string.h这个头文件,因此在使用前要先引用这个头文件

从上面的库函数网站可以找到strcpy的具体用法:
在这里插入图片描述如果看不懂可以翻译一下:
在这里插入图片描述
因此在使用这个函数的时候,我们需要向函数参数传入destination和source两个字符串,同时该函数的返回值是char* ,它会将拷贝后的destination起始地址返回给我们。
如以下的代码:

#include <stdio.h>
#include <string.h>
int main()
{
	char str1[] = "Sample string";
	char str2[40];
	char str3[40];
	char* str4;
	strcpy(str2, str1);
	str4=strcpy(str2, str1);
	strcpy(str3, "copy successful");
	printf("str1: %s\nstr2: %s\nstr3: %s\nstr4: %s\n", str1, str2, str3,str4);
	return 0;
}

在这里插入图片描述

可以看出str2,str3都得到了拷贝,另外由于它的返回值是char* ,因此我们用一个char* 类型的变量str4接收这个返回值,依然可以打印拷贝以后的字符串str2


二、自定义函数

虽然C语言中的库函数很多,但我们在学习和开发中所需要的功能库函数并不能全部满足,因此就需要我们自定义函数,来封装我们需要实现的功能。

自定义函数的定义语法为:

ret_type fun_name(para1, * )
{
 statement;//语句项
 return 返回值;//该返回值与返回类型必须相同,如果是void型函数,则不需要返回值,因此可以不写。
}
ret_type 返回类型
fun_name 函数名
para1    函数参数

在使用函数的过程中,我们用函数名(函数参数)的形式来调用自定义函数,由于一般函数在调用完以后产生一个返回值(比如一个两个数相加的加法函数,实现两个数相加以后返回两个数的和),因此我们可以用一个变量来接收这个返回值。

下面是一个可以找出两个整数最大值的函数:

#include <stdio.h>
int get_max(int x, int y) {
	return (x > y) ? (x) : (y);//三目操作符,在第一章初识C语言中讲过,如果x>y则返回x,反之则返回y
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	int max = get_max(num1, num2);
	printf("max = %d\n", max);
	printf("max = %d\n", get_max(num1, num2));
	return 0;
}

在这里插入图片描述

在程序运行过程中,给get_max这个函数传入num1,num2这两个参数,函数调用完后会返回num1和num2中的最大值,因此可以用max来接收这个返回值。当然也可以不用接收,因为在函数运行完以后,get_max(num1,num2)就相当于这个返回值,该返回值可以当做printf的参数直接进行打印操作。

1.函数的参数

实际参数(实参):

真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。在进行函数调用时,它们都必须有确定的值,这样才能把这些值传送给形参。

以上面的找出最大值的函数举例,传给函数的num1,num2就是实际参数。

形式参数(形参):

形式参数是指函数名后括号中的变量,在函数调用中会在栈区开辟一块存放传入的实际参数,这块内存中放的参数就是形式参数。形参只是实参的一份临时拷贝。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

以上面的找出最大值的函数举例,函数中的x,y就是形式参数。

由于形参只是实参的一份临时拷贝,因此对形参的修改并不会使实参发生任何改变,具体的内容在下面的函数的调用部分会详细说明。

2.函数的调用

2.1.函数的声明

在调用函数之前,我们必须对函数进行声明,告诉编译器我们有这样一个函数。函数声明的语法与函数的定义去掉{}后的部分相似,只是多了一个分号

ret_type fun_name(para1, * );

ret_type 返回类型
fun_name 函数名
para1    函数参数

如果函数在主函数之前定义的话,定义本身就是一种声明,因此我们不需要进行声明,如果函数的定义是在调用该函数的后面,则需要进行声明。还是以刚才的函数为例:

#include <stdio.h>
int main()
{
	int num1 = 10;
	int num2 = 20;
	int max = get_max(num1, num2);
	printf("max = %d\n", max);
	printf("max = %d\n", get_max(num1, num2));
	return 0;
}
int get_max(int x, int y) {
	return (x > y) ? (x) : (y);
}

在这里插入图片描述

如果不加声明,编译器会找不到这个函数。
在这里插入图片描述
加了声明以后就可以正常调用了。

2.2函数的传值调用

相当于将实参拷贝到形参中,对形参的修改不会影响实参。

如果我们想写一个函数来实现对两个数的交换:

#include <stdio.h>
void Swap1(int x, int y)
{
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int num1 = 1;
	int num2 = 2;
	Swap1(num1, num2);
	printf("num1 = %d \nnum2 = %d\n", num1, num2);
	return 0;
}

在这里插入图片描述

由于形参并不影响实参,函数在调用过程中只是对形参x,y进行了交换,并没有影响到num1,num2;并且函数在调用结束以后,x,y就已经被销毁了。
在这里插入图片描述

从监视中就可以看出,交换的仅仅是x,y且x,y的地址和num1,num2不同,他们相当于一块独立的空间,自身的改变并不会影响num1,num2。

2.3函数的传址调用

传址调用是直接把函数实参变量的内存地址传递给函数参数的一种调用函数的方式。
通过这个实参的地址可以让函数和函数外边的变量建立起正真的联系,也就是函数内部可以直接操
作函数外部的变量。

我们对上面的交换程序运用传址调用:

#include <stdio.h>
void Swap2(int* px, int* py) {
	int tmp = 0;
	tmp = *px;
	*px = *py;
	*py = tmp;
}
int main()
{
	int num1 = 1;
	int num2 = 2;
	Swap2(&num1, &num2);
	printf("num1 = %d \nnum2 = %d\n", num1, num2);
	return 0;
}

在这里插入图片描述
通过这种方式可以使得变量进行真正的交换。
在这里插入图片描述

通过监视可以看出,px和py就是一个指针,其中放的就是num1,num2的地址,*是解引用操作符,它可以通过地址找到地址中存放的变量值,比如px就是num1的指针,它的值是num1的地址,对px解引用就可以找到num1地址中存放的变量1,然后我们就可以对变量1进行操作了。

2.4传值和传址的使用场景

函数内部的形参只需要借用函数外部实参的值的时候用传值调用,比如求两个数的较大值。当函数内部需要对函数外部变量进行操作时用传址调用,比如交换两个数。

2.5函数的嵌套调用和链式访问

2.5.1嵌套调用

函数和函数之间是可以互相调用的。

#include <stdio.h>
void fun2()
{
	printf("hello world\n");
}
void fun1()
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		fun2();
	}
}
int main()
{
	fun1();
	return 0;
}

在这里插入图片描述
我们通过main函数调用fun1,通过fun1调用三次fun2,这就是函数的嵌套调用。

2.5.2链式访问

把一个函数的返回值作为另外一个函数的参数。

在上面的程序中:

#include <stdio.h>
int get_max(int x, int y) {
	return (x > y) ? (x) : (y);
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	int max = get_max(num1, num2);
	printf("max = %d\n", get_max(num1, num2));
	return 0;
}

我们将get_max的返回值作为printf函数的参数,这种方式就是链式访问。
下面有一个有趣的程序:

#include <stdio.h>
int main()
{
    printf("%d", printf("%d", printf("%d", 43)));
  
    return 0;
 }

在这里插入图片描述
这个程序实际上就是用printf的返回值作为printf的参数,因此想要弄明白这个程序,我们得先知道printf的返回值,通过查找 cplusplus.com可以知道printf返回值
在这里插入图片描述所以printf返回值是写入的字符总数,也就是字符的个数。

最内层的printf打印43,第二层的printf打印的是最内层printf的返回值,也就是“43”这个内容的元素个数2,最外层打印的是printf("%d",2)的返回值,返回值是其元素个数1。所以会打印出4321这四个数。


三、函数的递归与迭代

1.递归是什么

递归就是程序自己调用自己的过程,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

1.1递归的条件

  • 存在限制条件,当满足这个限制条件的时候,递归便不再继续,否则递归会不断进行,直到程序崩溃。
  • 每次递归调用之后越来越接近这个限制条件。

2.函数的递归

函数的递归就是函数自己调用自己的过程.

如果我们输入一串数字,,我们如何才能在屏幕上从高位向低位输出,比如输入123,输出1 2 3。
我们想要从高位向低位输出,就必须要依次获取到最高位到最低位,因此我们可以这一串数字每次除以10,每次进行判断是否小于10,小于10则不再进行除以10的操作,这样我们就可以得到最高位了,为了获取其他位,我们可以在每次除以10之前进行取模10的操作,得到剩下的位。

#include <stdio.h>
void print(int n) {
	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	int num = 123;
	print(num);
	return 0;
}

在这里插入图片描述
画图分析一下这个程序:
在这里插入图片描述

2.1函数递归中的问题

我们如果用递归来计算第50个斐波那契数:

#include <stdio.h>
int fib(int n)
{
	if (n <= 2)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}
int main()
{
	int num = fib(50);
	printf("%d", num);
	return 0;
}

运行程序,会发现程序要很长时间才能算出来,因为递归造成了很多重复性的计算。
在这里插入图片描述
不难看出,47在这里计算了3次,随着递归越来越小,更小的数会被重复计算更多次。
我们可以用以下的程序来验证:

#include <stdio.h>
int count = 0;
int fib(int n)
{
	if (n == 2)
	{
		count++;
	}
	if (n <= 2)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}

int main()
{
	int num = fib(30);
	printf("%d\n", num);
	printf("%d\n", count);
	return 0;
}

在这里插入图片描述

当计算到fib(2)时,count就自增1,可以看到fib(2)一共被计算到了514229次,这种方式效率非常低。
而且,这种方式还容易造成栈溢出:

内存一般分为栈区、堆区、静态区三部分,栈区主要用于存放局部变量、函数的形式参数等等,属于临时分配的空间。
当调用函数时,内存就会在栈区开辟空间,而系统分配给程序的栈空间是有限的,但是如果出现了死循环,或者(死递归),或者递归数量很大,这样有可能导致一直开辟栈空间,最终产生栈空间耗尽的情况,这种情况一般称为栈溢出(Stack overflow)

比如我们计算第1000000个斐波那契额数

在这里插入图片描述
在这里插入图片描述

为了该防止出现上面这种计算时间过长和栈溢出的情况,我们可以不用递归来写菲波那切数。
我们知道菲波那切数中一个数是前两个数之和,递归是从后往前算,我们可以从前往后算:

#include <stdio.h>
int fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}
int main()
{
	int num = fib(1000000);
	printf("%d\n", num);
	return 0;
}

在这里插入图片描述
这样就不会出现上述的问题了。

3.函数的迭代

迭代就是重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。
比如我们上面的从前向后算的菲波那切数。

4.函数递归和迭代的区别与优势

  • 有些问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
  • 有些问题的迭代实现往往比递归实现效率更高,但是代码的可读性稍微差些。
  • 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开销。

四、函数的分文件编写

在需要多人处理的大型项目中,如果将函数进行分文件操作,每个人只需完成自己负责的函数,最后将每个人写好的文件进行引用即可,并不需要所有人都写在同一个文件里面,这样将大大加快任务完成的效率。

1.我们一般将函数的声明和函数的定义分开写,声明放在头文件(.h)中,定义放在源文件(.c)中,防止出现编译错误
2.使用函数时需要先引头文件,语法是 #include “头文件名.h”

比如我们要分别实现加减乘除四个函数,我们就可以各自写各自的头文件和源文件,最后在main函数所在的文件中引用即可。
比如下面的加法头文件和源文件:

在这里插入图片描述在这里插入图片描述
在test1中引用各自的头文件:
在这里插入图片描述运行结果:
在这里插入图片描述


总结

这篇博客带大家了解了C语言中的库函数和自定义函数,我们可以通过这些实现各种各样的功能。
更多函数(比如strlen,strcmp,二分查找函数等)的实现我会在未来开篇博客单独说明。
当然,这篇博客如果有任何错误,或者各位大佬有任何建议,可以在评论区指出和提出,我会对博客进行修改和完善。

C语言的sqrt函数
m0_68824353的博客
08-31 7万+
在日常生活,我们往往会需要使用到计算机进行庞大的运算,例如求一个数的平方根。在本章我会教大家编写一个叫”求一个数的平方根“的程序。但我们在没学到C语言sqrt函数之前写这个程序未免有些许困难,但在学完sqrt函数后,我们会大幅度降低编写的难度,所以我们在编写”求一个数的平方根“程序时必须得要学习sqrt函数,但在学习sqrt函数之前我们必须要搭建环境才可使用sqrt函数。...
c语言程序函数类型,C语言函数分别有什么?
weixin_31706903的博客
05-18 8822
C语言函数是一种函数,用来编译C语言,所在库函数为ctype.h,分为分类函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。C语言函数在其他编程语言也称为过程或子程序。要执行任务,我们可以创建函数。一个函数可以被多次调用。 它提供了模块化和代码可重用性。C语言函数的优点函数有很多优点。它们分别如下 -(1)代码可重用性通过在CC语言创建函数,开发人员可以多次调用它。 所以开发人员...
C语言函数的基本知识
热门推荐
记录一些东东的地方
12-02 5万+
接着上次的数组,这次我们来简单的讲讲C语言里面的函数函数和指针这两大块,在C语言占据着重要的位置,是C语言的主体和核心,所以它们的重要性也就不言而喻了。 那什么是函数呢? 1:函数C语言的模块,一块块的,有较强的独立性,可以相互调用,也就是说,你可以在函数A调用函数B,又可在函数B调用函数C,不仅如此,你还可以调用函数自身(递归)。 2:函数是完成一个个特定任务的语句集合,它能完...
C语言函数(详解)
m0_63562631的博客
07-01 4万+
详细讲解初学者会遇到的函数问题,干活满满。
C语言-函数的调用
让你爱上电路设计
05-12 1万+
C语言-函数的调用
C语言常用的函数
girls的博客
01-03 3万+
C语言常用的函数1、putchar()函数2、getchar()函数3、pow( a , b )函数4、sqrt( a )函数5、fabs(a)函数6、puts(字符数组)函数——输出字符串的函数7、gets(字符数组)——输入字符串的函数8、strcat(a , b)函数——字符串连接函数9、strcpy函数——字符串复制函数10、strncpy函数——字符串复制函数11、strcmp函数——字符串比较函数12、strlen函数——测量字符串长度的函数13、strlwr函数——转换为小写的函数14、
c语言函数floor用法,C 库函数
weixin_34665982的博客
05-20 4821
C 库函数 - floor()描述C 库函数 double floor(double x) 返回小于或等于 x 的最大的整数值。声明下面是 floor() 函数的声明。double floor(double x)参数x -- 浮点值。返回值该函数返回不大于 x 的最大整数值。实例下面的实例演示了 floor() 函数的用法。#include #include int main (){float ...
c语言各种函数的作用,C语言常用函数用法大全
weixin_31129039的博客
05-16 3858
C语言是当广泛的计算机编程语言,是所有计算机编程语言的祖先,其他计算机编程语言包括当前流行的Java语言,都是用C语言实现的,C语言是编程效率高的计算机语言,既能完成上层应用开发,也能完成底层硬件驱动编程,在计算机程序设计当,特别是在底层硬件驱动开发当,具有不可替代的作用。在C语言学习过程当,除了学习好C语言基本语法外,掌握常用的C语言函数的使用也是非常重要的,本文主要给同学们详细讲解在...
C语言调用函数
weixin_53999350的博客
09-23 1万+
在定义函数时指定的函数类型一般应该和return语句的表达式类型一致。如果函数值的类型和return语句表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即。
C语言钩子函数使用讲解
最新发布
咸鱼弟的博客
10-05 6829
钩子(hook)又称钩子函数,是在一个有序的周期的某些特殊时刻,系统内部预先设置好的函数,当系统周期到达指定时刻 会自动执行该'钩子'。钩子函数函数体内容由开发者编写,这绐了幵发者在不同阶段做某些处理的机会。
C语言标准函数库详解.pdf
07-29
C语言标准函数库是C语言提供的一组预定义的函数,用于实现各种常见的操作,如输入输出、数学运算、字符串处理、时间日期处理等。这些函数库是C语言的基础组件,掌握这些函数库的使用是C语言编程的基础。 在C语言...
C语言标准函数库速查手册.chm
07-29
本速查手册《C语言标准函数库速查手册.chm》是一个实用的参考资料,它详细列举了C标准库的各种函数,帮助开发者快速查找和理解这些函数的用法。手册可能包括以下内容: 1. **输入/输出(I/O)**:头文件函数...
C语言的回调函数实例
12-31
C语言一般用typedef来为回调函数定义别名(参数名)。 别名通过宏定义typedef来实现,不是简单的宏替换。可以用作同时声明指针型的多个对象。 比如: 代码如下:char *pa,pb;//pa是一个char型指针,但pb是一个...
C语言实现简单的登录操作
精致的灰的博客
07-10 1万+
编写代码实现,模拟用户登录情景,并且只能登录三次。 要实现这种操作,我们需要设置一个字符串arr1用来存放密码,同时还要手动输入一个字符串password来记录我们输入的字符串,并将password与arr1字符串比较判断是否相同。同时for循环三次即可,如果输入正确则跳出循环。 值得注意的是: 在比较password与arr1是否相等时,不能够用==比较,比如下面的程序: #include <stdio.h> int main() { char password[10] = ""; cha
C语言计算阶乘及阶乘的和
精致的灰的博客
07-09 1万+
计算 n的阶乘。要实现这个阶乘的值并不难,只需要运用到for循环依次相乘即可,但要注意for循环i的初始值一定是从1开始到n结束。 #include<stdio.h> int main() { int i,n; int ret = 1;//用于存放阶乘的值 scanf("%d", &n); for (i = 1; i <= n; i++)//注意这里i的初始值和结束值 { ret *= i; } printf("%d", ret); } 如果要实现阶乘相加,我
C语言实现冒泡排序
精致的灰的博客
07-09 6299
的气泡会一点点地上浮到水面最后冒出,而这种排序算法的每一个元素都可以像小气泡一样,根据自身大小一点一点向着数组的左侧或者右侧移动。 对于一个无序数组,我们要实现其的元素按照升序排序或者降序排序,可以使用冒泡排序这种最基础的排序方法。 先介绍一下冒泡排序的思路(以升序为例,数组元素个数为n): 从数组的第一个元素开始比较与后面元素的大小。如果第一个元素比第二个元素大,就交换他们两个。 然后对第二个元素重复上面的操作,如果第二个元素比第三个元素大,就交换他们两个。 一直重复这种操作,直到第n-1个元素和
scanf(“%d“,&x)%d后面加空格即“%d “后产生的吃空白行为
精致的灰的博客
07-31 6038
当需要输入整形数据时,会发现如果%d 后面加了空格,按下回车键时控制台并没有反应,这其实就是吃空白行为。 文章目录前言%d后面加空格的吃空白行为吃空白的其他用法 前言 给变量赋值实际上是从缓冲区提取符合的数据到变量,而缓冲区的数据需要我们从键盘输入。 比如我们给两个整形变量赋值: #include<stdio.h> int main() { int a, b; scanf("%d%d", &a,&b); printf("a=%d", a); printf("b
EasyX图形编程
精致的灰的博客
07-28 6026
在之前的C语言,我们的代码最终展示界面都是控制台,也就是那个黑框框,这确实不够高大上,因此EasyX就是来解决这个问题的。 文章目录EasyX简单介绍EasyX安装图形编程前需要了解的一些概念三原色图形编程的窗口EasyX函数介绍设置窗口绘图函数输出文字的函数输出图片的函数鼠标操作非EasyX函数键盘消息函数播放音乐的函数如何修改窗口标题 EasyX简单介绍 Easy×是针对C++的图形库,可以帮助C/C++初学者快速上手图形和游戏编程。比如我们可以用这个东西画一个圆形,画一个汽车等物体,也可以用这个
EasyX实现贪吃蛇
精致的灰的博客
08-01 4412
成品展示: 文章目录实现思路代码实现game.hgame.cpptest.cpp 实现思路 贪吃蛇的实现思路并不复杂,由于我们需要将数据展示在图形窗口上,因此就不需要之前那种用数组表示整个游戏地图的方法。 贪吃蛇的蛇有X坐标和Y坐标,而且不止一节,因此需要一个坐标结构体数组来保存,蛇的移动思路是除了第一节以外,后面每一节都是前面一节的坐标,然后通过键盘的输入输出使蛇的X或Y坐标加或者减来起到上下左右移动的作用。通过判断蛇与食物的坐标是否重合绝对是否吃到食物,吃到食物以后,蛇的长度加一,分数增加,食物重
C语言malloc函数深度解析
C语言,`malloc()`函数是动态内存分配的重要工具,它允许程序在运行时根据需要请求内存。当程序需要创建一个不确定数量的对象或者在编译时无法确定数组大小时,`malloc()`就显得尤为有用。`malloc()`函数的基本...
写文章

热门文章

  • 12 C++的多态 22101
  • 01Linux常用指令 18548
  • C语言实现简单的登录操作 16124
  • C语言计算阶乘及阶乘的和 14185
  • C语言中四种取整方式、取余/取模的运算以及负数取模的问题 11800

分类专栏

  • C++ 32篇
  • 计算机网络 12篇
  • 设计模式 12篇
  • Go 6篇
  • 项目 1篇
  • 数据结构(C++实现) 19篇
  • Linux 26篇
  • 算法 2篇
  • MySQL 9篇
  • C语言 31篇
  • C语言的深度剖析 15篇
  • LeetCode算法题 3篇
  • 数据结构(C语言实现) 13篇

最新评论

  • C++设计模式---策略模式

    悠以悠: 这编译是咋通过的啊,#include"Fighter.hpp"和#include"ItemStrategy.hpp"不是循环依赖了么?

  • C语言变量的定义与声明,为什么全局变量不能赋值

    ღ( ´・ᴗ・` )ღ.: 博主,python是支持修改全局变量的,这个有误

  • C++设计模式----工厂模式

    海蓝菌: 形象 很容易理解

  • C++设计模式----装饰器模式

    敲键盘的小夜猫: 非常赞赏您分享这个博客帖子!文章的结构非常清晰,您对主题的深入分析与全面的视角提供了极大的价值。

  • C语言中return返回函数局部变量的问题

    lingling_329: 我的疑问一个,如果返回局部变量地址,主函数打印时为null,但是如果先把局部变量地址赋给一个指针变量,再返回指针变量的值,这时就可以正确打印。为什么返回指针变量的值和直接返回地址结果不同,它们两个返回的不是同一个值吗

大家在看

  • 基于黑猩猩算法优化的最小交叉熵图像多阈值分割
  • 基于社会群体算法优化的最小交叉熵图像多阈值分割
  • 静态绑定和动态绑定 555
  • 算法学习之416周赛 790
  • 实战OpenCV之直方图

最新文章

  • C++设计模式---组合模式
  • C++设计模式---命令模式
  • Go语言常用的数据结构
2022年81篇
2021年96篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也要写bug、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家广西玻璃钢智能雕塑莆田玻璃钢雕塑设计河源户外玻璃钢雕塑张掖玻璃钢十二生肖雕塑泰州玻璃钢雕塑设计方案河池玻璃钢雕塑特点吉林多彩玻璃钢雕塑供应商浦东新区玻璃钢雕塑制造厂家玻璃钢花盆推销温州创意玻璃钢雕塑定做价格苏州frp玻璃钢雕塑哈尔滨玻璃钢雕塑人物三亚玻璃钢不锈钢雕塑西藏门头玻璃钢雕塑包头玻璃钢雕塑订制价格广州人物雕像玻璃钢雕塑制作泮艺雕玻璃钢雕塑厂家云南公园玻璃钢雕塑定做价格新郑玻璃钢景观雕塑加工商场服装美陈怎么做方案深圳季节性商场美陈售价白银抽象人物玻璃钢雕塑厂家河北商场主题创意商业美陈传播湖南人物玻璃钢雕塑供应商周年庆典商场美陈怎么样湛江玻璃钢雕塑销售价格广州商场美陈工厂滨州小品系列玻璃钢雕塑厂家广东大型商场美陈采购玻璃钢动物马雕塑生产厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化