一、c++中static的用法详解
1、静态局部变量
#include<iostream>
using namespace std;
int fun(int x)
{
static int a=3; //静态局部变量
x+=a++;
return x;
}
int main()
{
int x=2,sum;
sum=fun(x);
sum=sum+fun(x);
printf("%d\n",sum);
}
静态局部变量存在全局变量区,只在第一次时初始化,a=3,随后一直保留到整段程序运行完,所以,a是变化的。第一次调用sum=2+3=5,第二次调用2+4+5=11。
这是为了避免全局变量带来混乱的问题。
二、地址指针
#include <iostream> using namespace std; int main () { int a[5]={1,2,3,4,5};//a是数组,就是以5*4=20个字节为单位进行位置变化 cout<<&a[0]<<" "<<&a[4]<<endl; cout<<&a<<" "<<&a+1<<endl;//对应a数组的起始位置和下一个数组的起始位置 cout<<*a<<" "<<*(a+4)<<endl; // 对比上行代码,注意带括号和不带括号区别 int *p=(int *)(&a+1); //p指针将数组为单位转换为int为单位,所以这里(p-1),只是变换4字节 cout<<p<<endl; printf("%d",*(p-1)); return 0; }
三、
#include <iostream>
using namespace std;
int Num[100000]={0} ;
int main ()
{
int n;//作业份数
while(cin>>n)
{
int m,x,k;//每份挣得钱,罚的钱,复查的钱。
cin>>m>>x>>k;
int n0=0,n1=0,r,M=0;
for(int i=0;i<n;i++)
{
cin>>r;
if(r==0)
{
n0++;
M+=(m-x);
}
else
{
n1++;
M+=(m-k);
}
}
if(n0<=n1)
{
M+=n0;
}
else
{
M+=n1;
}
cout<<M<<endl;
}
return 0;
}
//4 5 2 1 1 1 1 0