全局变量
定义在所有函数外的变量, 均为静态存储, 作用域是定义处到源文件结束处, 可以使用 extern 和 static 对其作用域进行扩展和限制
- extern 是扩展
- 将 全局变量扩展定义到定义之前
#include <iostream>
using namespace std;
int min(int a, int b) //定义min函数
{
int c;
c = a < b ? a : b;
return (c);
}
extern int a, b;
int main()
{
cout<<min(a, b)<<endl;
}
int a = 4, b = 7;
- 将全局变量扩展到其它文件
#include <iostream>
using namespace std;
int a; //定义全局变量
int main()
{
int power(int); //对调用函数作声明
int b=3, c, d, m;
cout<<"enter the number a and its power m:"<<endl;
cin>>a>>m;
c=a*b;
cout<<a<<"*"<<b<<"="<<c<<endl;
d=power(m);
cout<<a<<" ** "<<m<<"="<<d<<endl;
}
extern int a; //声明a是一个已定义的全局变量
int power (int n)
{
int i, y=1;
for(i=1; i<=n; i++)
y=y*a;
return (y);
}
- static 是限制
有时候可能需要限制某些全局变量,不让别的文件使用, 可以用static做限制
外部函数和内部函数
内部函数只能在本文件中使用
外部函数可以被其他文件引用
数组
为什么需要数组? 节省变量的声明个数
- 数组的定义
#include <iostream>
# include <iomanip>
using namespace std;
int main()
{
// 数据类型 数组名[容量]
int a[10];
for (int i = 0; i <= 9 ; i++) {
a[i] = -i;
}
for (int i = 0; i < 10 ; ++i) {
cout << setw(4) << a[i] ;
}
return 0;
}
数组的声明
#include <iostream>
# include <iomanip>
using namespace std;
int main()
{
// 数组的创建形式
int a[5] = {11, 22, 33, 44, 55};
cout << "a[5] = ";
for (int i = 0; i < 5 ; ++i) {
cout<< a[i] << setw(4) ;
}
cout <<endl;
// 部分赋值 没有分到的给默认值 0
cout << "b[10] = ";
int b[10] = {111, 222, 333, 444};
for (int i = 0; i < 10 ; ++i) {
cout<< b[i] << setw(4) ;
}
// 赋值一样的
cout <<endl;
cout << "w[10] = ";
int w[5] = {9};
for (int i = 0; i < 15 ; ++i) {
cout<< w[i] << setw(4) ;
}
// 不指定容量, 但是编译创建是为该数组开辟4 个内存空间
int d[] = {1, 2, 3,4};
}
不同声明下数组的初始值
#include <iostream>
# include <iomanip>
using namespace std;
int x[5]; //全局数组,静态型,各元素初值为0
int a; // 类比全局数组
int main()
{
static int y[5]; //局部数组,静态型,各元素初值为0
int z[5]; //局部数组,动态型,各元素初值不确定
int b;
for(int i=0; i<5; i++)
cout<<x[i]<<'\t';
cout<<endl;
cout<<"---------------------------"<<endl;
for(int i=0; i<5; i++)
cout<<y[i]<<'\t';
cout<<endl;
cout<<"---------------------------"<<endl;
for(int i=0; i<5; i++)
cout<<z[i]<<'\t';
cout<<endl;
cout<<a<<'\t'; // 0
cout<<b<<'\t'; // 6422352 很大值
}
示例
用数组求Fibonacci数列的前20项和前20项之和
#include <iostream>
# include <iomanip>
using namespace std;
int main()
{
int fibo[20] = {1, 1};
int sum = fibo[0] + fibo[1];
for (int i = 2; i < 20 ; ++i) {
fibo[i] = fibo[i-1] + fibo[i-2];
sum += fibo[i];
}
// 遍历
for (int i = 0; i < 20 ; ++i) {
cout << fibo[i] << "\t";
if ((i+1)%5==0)
cout << "\n";
}
cout<< " 20 nums = "<< sum<<endl;
}
数字作为参数
- 数组中元素作为参数
#include <iostream>
using namespace std;
int large (int x, int y)
{
int flag;
if (x>y)
flag=1;
else if (x<y)
flag=-1;
else flag=0;
return(flag);
}
int main()
{
int a[4] = {2223, 166 , 33 , 55};
int b[4] = {323, 166 , 3 , 5335};
int g = 0, e = 0, l = 0; //g代表 a 中 比b 大的数量; e是等, l是少
for (int i = 0; i < 4; ++i) {
int r = large(a[i], b[i]);
if (r==1) g++;
else if(r == 0) e++;
else l++;
}
cout<<" a[i] > b[i] counts "<<g<<endl;
cout<<" a[i] = b[i] counts "<<e<<endl;
cout<<" a[i] < b[i] counts "<<l<<endl;
}
- 数组作为参数(即数组名)
#include <iostream>
using namespace std;
void add100(int b[]){
for (int i = 0; i < 4; ++i) {
b[i] = b[i] + 100;
}
}
int main()
{
int a[4] = {1, 2, 3, 4};
add100(a);
for (int i = 0; i < 4 ; ++i) {
cout << a[i] << "\t";
}
}
网友评论