前面我们第一次接触main的时候是在我们的第一个程序里,
代码如下
void main(){
}
其实,main也是一个函数,前面我们为了便于记忆,所以,大多数程序中都是用的这种返回空值并且没有传入参数的main函数。巧合的是vc6.0
恰好允许这种,下面我们来看另一个编译器的结果
左面是代码,右面部分是编译器报错。根据错误信息我们应该把main的返回类型设置成int型,并确实 返回一个整数,一般是0
于是
很明显,这次就对了,至少编译器认为这老铁没毛病。
然后我们试试向main中传入参数(想想 一般我们是在调用函数的时候才能实际的传入参数,但是,main已经是入口了,那么在那里调用了它呢 自行百度)
main函数的传入参数的方式通常如下
这里显示有两个参数,一个是 "./a.out" 还有一个是 "zhishui" (其中./a.out 是执行程序的命令,这里也被算作参数) 这里暂时知道有这种用法就好,以后会有详细的讲解的
前面,在介绍函数和变量的时候说过,想要使用一个东西的话要先让编译器知道你用的是什么东西。所以,在使用一个变量之前要先进行声明,但是,变量的声明不是一劳永逸的,在不同的地方声明变量其起作用的范围是不同的(就像结婚这种,在A省登记结婚之后只有A 省知道你结婚这件事,B省并不知道 ps:仿佛很有趣)。所以在不同的地方声明变量其起作用的范围是不同的(有些时候不同编译器也是不同的,这里只针对vc6.0)
第一种:在所有函数之前声明 在所有不存在同名参数的函数中都可以使用(因为这种变量满世界都可以用,所以也叫全局变量) 示例如下:
#include<iostream>
using namespace std;
int a = 0;
void shuchu();
int main(){
cout<<"main中的a="<<a<<endl;
shuchu();
return 0;
}
void shuchu(){
cout<<"输出函数中的a="<<a<<endl;
}
结果
第二种 在函数中声明,该函数中从声明该变量开始到整个函数结束都可以使用(该函数中调用的函数中不可以使用 调用该函数的函数也不能使用) 示例如下
在函数 hanshu1中定义了变量a,在调用他的main中编译器表示找不到这个东西。然后我们试试它调用的hanshu2 能不能使用
果然,函数2中也不负众望的不能使用。
然后,是在for循环开始的时候声明 这种情况不同编译器会有不同的结果,在我用的vc里这种情况等效于在函数中声明 如下
#include<iostream>
using namespace std;
int main(){
for(int i=0;i<10;i++){
cout<<"循环中i="<<i<<endl;
}
cout<<"结束时i="<<i<<endl;
return 0;
}
结果
但是,有些编译器中可能这种只有在循环中才可以用,出了循化就找不到了,看自己的具体情况了。
还有一种 在函数的参数中声明 如下
#include<iostream>
using namespace std;
int hanshu1(int a);
int main(){
hanshu1(1);
return 0;
}
int hanshu1(int a){
cout<<"a="<<a<<endl;
return 0;
}
这里的a相当于在 函数 hanshu1 中的第一句话的位置声明了一个变量,然后 ,在调用时给它赋具体的值。所以,这里的a起作用区域就是函数 hanshu1 的开始到结束。
然后可以试试函数中的变量和全局变量同名以及参数名和函数中变量同名会发生什么。
前面我们已经讲过了自己写函数,其实有些常用的函数早有前人帮我们写好了,我们只要使用一下就好了,比如 求一个数的平方根的sqrt函数。只要传进去一个参数就可以得到这个数的平方根 如下
#include<iostream>
#include<math.h>
using namespace std;
int hanshu1(int a);
int main(){
cout<<sqrt(9.9)<<endl;
return 0;
}
结果如下
然后我们注意到 在include<iostream> 和 using namespace std; 之间多了一行#include<math.h>.
这里是因为我们使用了sqrt函数,但是,如果我们不声明它的话 就没人知道这货是啥,然后我们自己声明这些其它人写的东西又很蛋疼。所以,前人已经把它们声明好了放在对应的.h文件中。我们使用这些函数时只要用include的方式引入对应的头文件就好了。引入的头文件会在编译前把自己的代码放到include的位置上的。如下(当然,头文件不仅仅只做这些事情)
然后我们发现,a.h中的内容到了test.cpp中了。前面我们用到的iostream 也类似。
最后讲讲函数调用之间的关系
比如前面的main函数调用 函数 hanshu1 然后函数 hanshu1 调用函数 hanshu2。它们的关系大概是下面这样