美文网首页
C++入坑记(3)

C++入坑记(3)

作者: yeshan333 | 来源:发表于2018-10-07 22:55 被阅读5次

变量初始化问题

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

数据类型 初始化默认值
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;
}
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

相关文章

  • C++入坑记(3)

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

  • C++入坑记

    C++关键字 https://www.runoob.com/w3cnote/cpp-keyword-intro.h...

  • C++入坑记(2)

    一般函数 在C++中,允许在自定义函数的形参列表中,给形参一个默认的值,这样在调用的时候如果有实参,那么按照实参传...

  • Moya:入坑记

    Moya:入坑记

  • D3.js入坑记|0 简介

    D3.js入坑记 标签(空格分隔): 技术 数据可视化( Data Visualization )是把人类看不见的...

  • 入坑记

    (一) 叮咚,手机屏幕上弹出一条推送:2018年区块链高峰论坛今天在杭州开幕,出席会议的嘉宾有…… 小东看了一眼手...

  • 入坑记

    引言 初入前端一年多,慢慢也有了属于自己的编码风格,但是目前也有很多地方值得去学习,虽然之前有很多问题都是来简书上...

  • 入坑记

    你们有没有因为一句台词去看一本书,或者因为一个镜头去追一部剧,我最近因为“小三爷,潘子我没力气说别的话了,最后在为...

  • 入坑记

    昨天带小朋友们去一个亲子乐园玩,广告上看上去美仑美奂,项目多多,哪知到了那里之后,门庭冷落,满目萧条,门票却不便宜...

  • C++小入坑

    一门中级语言,具有面向过程,面向对象的编程范式。扩展名为cpp hello world 使用g++编译一个C++程...

网友评论

      本文标题:C++入坑记(3)

      本文链接:https://www.haomeiwen.com/subject/kkwraftx.html