C++入坑记(3)


变量初始化问题

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

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

C++储存类

  • auto
  • static
  • extern
  • register
  • mutable
  • thread_local

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;
}

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; 
} 

用引用做函数形参

#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;

}

引用做返回值

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

#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;
}



文章作者: ShanSan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ShanSan !
 上一篇
C++面向对象 C++面向对象
类 & 对象 类是对象的抽象和概括,而对象是类的具体和实例 类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。 类中的数据和方法称为类的成员。(成员有变量也有函数,分别成为类的属性和方法) #include
2018-10-05
下一篇 
工具小整合 工具小整合
百度文库、知网文章下载https://pan.baidu.com/s/1-BY2B4hBn_3wHgYlXkFLCg 百度云下载提速软件https://pan.baidu.com/s/1EYy5AN9JVv7m42f6NNmvlA 微
2018-10-03 ShanSan
  目录