前言
这一章介绍了C++中基本的函数知识,内容部分和C语言重叠,故只介绍C++中特有的。对应课本第七章:Functions: C++’s Programming Modules(函数——C++的编程模块)。这是C++函数部分的其一,其二对应的是第八章,将在下一次发布。
函数返回值
我们知道,对于有返回值的函数,必须使用返回语句,以便将值返回给调用函数。C++对于返回值的类型有一定的限制:不能是数组,但可以是其他任何类型一整数、浮点数、指针,甚至可以是结构和对象。
因此我们对数组返回的时候,可以考虑返回数组名,即一个指针。
或者当我们使用C++时,可以返回string类的值,因为它是一个对象。
以函数形参
C++中可以一个函数作为作为另一个函数的参数(当然C也可以)把函数名作为参数就是函数的地址,要将函数名作为参数,需要使用函数指针。即用指针代表函数名!
例如,我们想在一个双向链表里找到一个数据,这个数据可能比较复杂,我们在其他文件中自定义为Data类型,链表的名字是G_dl_node。这个函数的参数,head表示首结点的地址,d表示要找的数据,比较函数data_compare中,若数据x==数据y,则返回0;大于返回1,小于返回-1。这个函数最后返回找到的数据的地址。
G_dl_node * g_dl_find_data(G_dl_node * head, Data d, int (* data_compare)(const Data x, const Data y)){
G_dl_node *p=head;
while(p->next)
{
if(!(data_compare(p->data,d)))
return p;
else p=p->next;
}
return NULL;//if doesn't find
}
我们可以看到这个函数的参数中有一个比较函数data_compare,我们在调用这个g_dl_find_data函数时,需要传一个比较函数的函数名作为地址。
例如,我们这样调用:g_dl_find_data(head,d,compare);
compare是自己写的一个比较函数,只要满足上面参数的那个形式都可以形参。
Main函数参数
C/C++语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:
int main (int argc,char *argv[]){…}
int main (int argc,char **argv){…}
其中第一个argc表示参数的个数;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]指向第二个参数……
例如:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char **argv)
{
string str;
cout<<"argc:"<<argc<<endl;
for (int i = 0; i != argc; ++i)
{
cout << "arg[" << i << "]" << argv[i] << endl;
}
return 0;
}
我们如何使用呢?当我们编译好文件后,需要在终端中提供参数。例如可执行文件是a.exe
,调用参数读入demo.txt
,我们可以在终端中输入:a ./demo.txt
Auto
在C++中,auto是一个关键字,表示自动推断类型,例如:
int a1=5;
auto a2=a1;
程序会自动推断a1的类型,自动生成类型相同的变量a2。
后记
好了,这一节的新内容大致就这么多了,如果还有补充会在下一期继续补充~
Comments NOTHING