C++入坑记(3)

2018-10-07  本文已影响5人  yeshan333

变量初始化问题

当局部变量被定义时,系统不会自动对其初始化;
当全局变量被定义时,系统会初始化为下列值:

数据类型 初始化默认值
int 0
float 0
double 0
char '\0'
pointer NULL

C++储存类

static储存类

用于指示编译器在程序的生命周期内保持局部变量的存在,而不需要每次在它进入和离开作用域时进行创建和销毁。

  1. static修饰局部变量,可以在函数调用之间保持局部变量的值
  2. static修饰全局变量,会使变量的作用域限制在生明它的文件内
    参考
#include<iostream>
using namespace std;

static int count=10;  //全局变量 

void func()
{
    static int i=5;  //局部静态变量 
    i++;
    cout<<"变量i为:"<<i;
    cout<<",变量count为:"<<count<<endl; 
}
int main() 
{
    while(count--)
    {
        func();
    }
    return 0;
}
image

extern储存类

用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。使用extern时,对于无法初始化的变量,会把变量名指向一个之前已经定义过的存储位置。
当有多个文件且定义了一个就可在其他文件中使用的全局变量或函数时,可以在其他文件中使用extern来得到已定义的变量或函数的引用。

C++引用

引用变量是一个别名。它是某个已存在的变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量

引用与指针的差别

引用可以当成变量附属在内存的第二个标签

int i;
//为i声明一个引用变量
int& r=i;
#include<iostream>
using namespace std;

int main()
{
    int i;
    double d;
    
    //声明引用变量
    int& r=i;
    double& s=d;
    
    i=3;
    cout<<"Value of i:"<<i<<endl;
    cout<<"Value of i reference::"<<r<<endl;
    
    d=5.20;
    cout<<"d= "<<d<<endl;
    cout<<"Value of d reference:"<<s<<endl;
    
    return 0; 
} 
image

用引用做函数形参

#include<iostream>
using namespace std;

void swap(int& x,int& y)
{
    int temp;
    temp = x;
    x = y;
    y = temp;
}

int main()
{
    int a,b;
    cin>>a>>b;
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
    swap(a,b);
    cout<<"after exchange:"<<endl;
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
    
}
image

引用做返回值

当函数返回一个引用时,则返回一个指向返回值的隐式指针。

#include<iostream>
#include<ctime> 
using namespace std;

int vals[]={1,2,3,4,5};

int& setValues(int i)
{
    return vals[i];//返回第i个元素的引用 
}

int main()
{
    cout<<"before change:"<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<vals[i]<<" ";
    }
    
    setValues(1)=520;   //change the second value 
    setValues(3)=1314;  //change the forth value 
     
    cout<<endl<<"after change:"<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<vals[i]<<" ";
    }
    return 0;
}
image
上一篇 下一篇

猜你喜欢

热点阅读