时间:2022-10-09 17:32:10 | 浏览:357
一、函数概述
1、首先什么是函数?
函数是用于完成特定任务的程序代码的自包含单元。
2、为什么使用函数?
第一、函数的使用可以身故重复代码的编写。第二、函数使得程序更加模块化,有利于程序的阅读修改和完善。
3、main函数原型
int main (int argc, char * argv[], char * envp[]) {....}
第一个参数:命令行参数的个数
第二个参数:命令行参数的地址信息
第三个参数:环境表的首地址
参数argc表示输入参数的个数(含命令名),如果有命令行参数,argc应不小于1;argv表示传入的参数的字符串,是一个字符串数组,argv[0]表示命令名,argv[1]指向第一个命令行参数;至于第三个参数env,它与全局变量environ相比也没有带来更多益处,所以POSIX.1也规定应使用environ而不使用第三个参数。通常用getenv和putenv函数来存取特定的环境变量,而不是直接使用environ变量。例如:
//main函数原型的使用
#include <stdio.h>
int main(int argc,char* argv[],char* envp[])
{
printf("argc=%d ",argc);
int i=0;
for(i=0;i<argc;i++)
{
printf("感谢%s ",argv[i]);
}
//声明全局变量
extern char** environ;
printf("environ=%p,envp=%p ",environ,envp);//直接访问环境表
return 0;
}
输出结果为:
argc=1
再如:
命令行为:myprogram c:a.txt c:.txt
则:argc==3
argv[0]=="myprogram"
argv[1]=="c:a.txt"
argv[2]=="c:.txt"
再再如:
#include <stdio.h>
int main (int argc, char *argv[])
{
int count;
printf ("The command line has %d arguments: ", argc - 1);
for (count = 1; count < argc; count++)
printf ("%d: %s ", count, argv[count]);
printf (" ");
return 0;
}
输出结果:
tarena@ubuntu:~/project/C$ ./a.out I LOVE YOU
The command line has 3 arguments:
1: I
2: LOVE
3: YOU
每个C程序都必须有一个 main 函数,因为它是程序执行的起点。关键字 int 表示函数返回一个整型值,关键字 void 表示函数不接受任何参数。main 函数的函数体包括左花括号和与之匹配的右花括号之间的任何内容。
注意:如果没有写明返回值,一般默认为 int 类型。
main (void)
{
...
return 0;
}
二、函数声明和定义 可以加下小编的群466572167,可以交流学习,也有资料下载
1、函数声明
在任何程序在使用函数之前都需要声明该函数的类型。
例如:int imax (int a, int b);
第一个int指的是函数类型;位于圆括号内的两个int表明该函数的形式参数为int类型。分号的作用表示该语句是进行函数声明而不是函数定义。
在函数原型中可以根据自己的喜好省略变量名。
int imax (int , int);
需要注意的是这些变量名只是虚设的名字,他们不必和函数定义中使用的变量名想匹配。使用这种函数原型信息,编译器就可以检查函数调用语句是否和其原型声明一致。比如检查参数个数是否正确,参数类型是否匹配。将声明语句放置在main ()之前和之内两种方式都是正确的。需要重点注意的是函数声明要在使用函数之前进行。当在main之前函数定义的话,就不需要声明语句了。
#include <stdio.h>
int imin (int, int);
int main (void)
{
int inim (int, int);
}
2、隐式声明
如果被调用函数写在调用函数后面则编译器会猜测被调用函数的格式,这叫做函数的隐式声明。隐式声明可以和实际情况不一致这时就会出错,可以把被调用函数的声明单独写在文件开头,这叫做函数的显示声明。除了主函数以外的所有函数都应该进行显示声明,因为主函数永远不是被调用函数。如果main()之后又函数定义,main()之前却没有函数声明的话,编译的时候会出现隐式声明报错。
3、头文件的使用
如果把main ()函数放在第一个文件中吧自定义哈拿书放在第二个文件中实现,那么第一个文件仍需要使用函数原型。如果把函数原型放在一个头文件中,就不必每次使用这些函数时输入其原型声明了。
#ifndef __02READ_H__
#define __02READ_H__
extern int num; //主函数全局变量写在了头文件里且要加extern关键字
int read(char, int); //函数声明
#define PI 3.14
#endif
4、函数定义
函数声明只是将函数类型告诉编译器,而函数定义部分则是函数的实际实现代码。之所以使用函数原型,是为了在编译器编译第一个调用函数的语句之前想其表明该函数的使用方法。因此,可以在首次调用某函数之前对该函授进行完整的定义。这样函数定义部分就和函数原型有着相同的作用。通常对较小的函数会这样做:
//下面既是一个函数的定义,也是它的原型
#include <stdio.h>
int imax (int a, int b)
{
return a > b ? a : b;
}
int main (void)
{
int x, z;
scanf ("%d", &x);
z = imax (x, 50);
printf ("%d ", z);
return 0;
}
三、函数形参与实参 可以加下小编的群466572167,可以交流学习,也有资料下载
1、形式参数
函数定义为下面的函数:
void show (char ch, int num)
这行代码通知编译器show()使用名为ch和num的两个参数,并且这两个参数的类型分别为char和int。变量ch和num被称为形式参数。
注意:ANSI C形式要求在每个变量前声明其类型。也就是说,不能像通常变量声明那样使用变量列表声明同一类型的变量。如下所示:
void dibs (int x, y, z) /*不正确的函数头*/
void dibs (int x, int y, int z) /*正确的函数头*/
2、实际参数
函数调用中,通常使用实际参数对ch和num赋值,如:
show (SPACE, 12);
形式参数是被调函数中的变量,而实际参数是调用函数分配给被调用函数变量的特定数值。实际参数可以是常量、变量或一个复杂的表达式。但是无论何种形式的实际参数,执行时首先要计算其值,然后将该值复制给被调用函数中相应的形式参数。
3、无参数
void dibs (void);
为了表示一个函数确实不使用参数,需要在圆括号内加入void关键字。
四、递归函数
1、递归介绍
C允许一个函数条用其本身,这种调用过程被称为递归。
递归与循环比较:
采用递归函数解决问题的思路叫递归
采用循环解决同样问题的思路叫递推
递归一般可以代替循环语句使用。有些情况下使用循环语句比较好,而有些时候使用递归更有效。递归方法虽然使用程序结构优美,但其执行效率却没有循环语句高。一般来说,选择循环更好一些。首先,因为每次递归调用都拥有自己的变量集合,所以就需要占用较多的内存;每次递归调用需要把心的变量集合存储在堆栈中。其次,由于进行每次函数调用需要花费一定的时间,所以递归的执行速度较慢。
//示例一
#include <stdio.h>
void show (int);
int main (void)
{
show (1);
return 0;
}
void show (int n)
{
printf ("Level %d: n location %p ", n, &n);
if (n < 4)
show (n + 1);
printf ("Level %d: n location %p ", n, &n);
}
执行结果如下:
Level 1: n location 0xbf8bf680
Level 2: n location 0xbf8bf660
Level 3: n location 0xbf8bf640
Level 4: n location 0xbf8bf620
Level 4: n location 0xbf8bf620
Level 3: n location 0xbf8bf640
Level 2: n location 0xbf8bf660
Level 1: n location 0xbf8bf680
//示例二
#include <stdio.h>
void print (int num)
{
if (num == 1)
{
printf ("1 ");
return ;
}
printf ("%d ", num);
print (num -1);
}
int main (void)
{
print (10);
return 0;
}
输出结果:
10
9
8
7
6
5
4
3
2
1
2、递归的基本原理
第一:每一级的函数调用都有自己的变量。
第二:每一次函数调用都会有一次返回。
第三:递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序。
第四:递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反。
第五:虽然每一级递归都有自己的变量,但是函数代码并不会得到复制。
最后:递归函数中必须包含可以终止递归调用的语句。
3、递归的优缺点
其优点在于为某些变成问题提供了最简单的解决方法,而缺点是一些递归算法会很快耗尽计算机的内存资源。同时,使用递归的程序难于阅读和维护。
五、指针函数和函数指针 可以加下小编的群466572167,可以交流学习,也有资料下载
指针函数:返回指向char的指针的函数,例如:char * fump ( );
函数指针:指向返回类型char的函数指针,例如:char (* frump) ( );
这里需要明白一个符号之间优先级的问题,"( )"的优先级比"*"要高。
再考虑一个,char (* flump[3]) ( );
由3个指针组成的数组,每个指针指向返回类型为 char 的函数。
小编就把自己对C语言里面函数的了解,总结了一下,写了个大概,对于刚接触C语言知识的各位,可以看一下这篇文章,希望对大家有所帮助吧。
01.介绍篇操作系统及开发系统02. 入门篇03.提高篇03.精通篇C语言精通大牛阶段C语言EasyX图形编程如果你与我志同道合于此,很愿意与你交流如果你喜欢我的内容,欢迎关注和支持C语言基础入门资料:素材资源:想要资源的小伙伴可以可以【点
前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。198
C语言是一种结构化的编程语言。它也称为面向函数的编程语言。C语言是由美国贝尔实验室(AT&T)的Dennis Ritchie于1972年开发的。1968年,丹尼斯·里奇(Dennis Ritchie)开始研究诸如BCPL,CPL之类的编程语
前言作为理工科的我们,看到一些理论、概念和一些术语,就是脑瓜疼。在大学时,这些知识,很多时候都是作为填空题,最终的答案就跟四级作文差不多,答案脑洞大开。回归正题,其实,有很多东西我们只需要了解一下就好了,知道有这么一回事。例如,C语言是谁搞
C语言入门了解篇-C语言编译流程(面试常见问题)当我们安装了集成环境之后,编写.c文件,一按下图红色框框的按键即“编译并运行”,就可以得到一个“.exe”后缀的可执行的C程序文件,这期间并非只有一道工序,而是分别经过了预处理、编译、汇编和链
很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编
C语言是一门面向结构化的高级编程语言(也有人认为它是中级语言),用于通用编程需求。基本上,C语言是其基本语法和库函数的集合,因此程序员定义自己的函数并且将其包含在C语言库中也是很方便的。C语言的主要用途是编写其他编程语言的编译器、操作系统、
上一篇文章中,简单地介绍了一下什么是编程,以及编程根据编译运行的方式有哪些分类,还附带一些些小小的学习建议。从这篇文章起,就正式进入了C语言学习中。C语言简述首先来认识一下,什么是C语言?C语言是一种计算机程序设计语言,于1972年诞生于美
看了此文后,我想对于您学习此语言一定有很大的帮助,同时也能了知晓如何用最短的时间学会C语言以及掌握C语言的精髓所在。谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握
学C语言不知道从哪儿下手?学习框架都帮你列好了!在未来计算机专业讲又要迎来一批新生小鲜肉!C语言入门到入土,从长发飘飘到秃顶的老铁也越来越多,其中,想自学成才的也占了不少数;想笨鸟先飞的也占有不少数。传说中的C语言就是那么刺激和高挑战没有基
一、C语言程序的构成与C++、Java相比,C语言其实很简单,但却非常重要。因为它是C++、Java的基础。不把C语言基础打扎实,很难成为程序员高手。1、C语言的结构先通过一个简单的例子,把C语言的基础打牢。C语言的结构要掌握以下几点:(1
C语言是一种计算机程序设计语言,它既有高级语言的特点,又具有低级汇编语言的特点。它可以作为系统设计语言来编写工作系统应用程序,也可以作为应用程序设计语言来编写不依赖计算机硬件的应用程序。因此,它的应用范围非常广泛。C语言的诞生及发展历程如图
C教程更多C/C++学习资料 私密我“代码”,即可获取C是贝尔电话实验室的Dennis M. Ritchie于1972年开发的一种通用的,程序性的,命令式的计算机编程语言,用于开发UNIX操作系统。C是使用最广泛的计算机语言。它与Java编
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都
真不难C语言难不难?这个问题是相对的,对于找到合适方法学习C语言的同学想必是觉得很简单;但对于一部分同学来说,没有众观全局就会误以为刚入门就需要学习庞大的知识,学着学着开始看不懂,由于心理作怪,感觉内容巨多,之后就真的一直看不懂了。但C语言