c++ 变量

变量提供一个具名的、可供程序使用的存储空间。所以变量实际上就是给一个存储空间起了一个名字,然后我们可以用这个名字来访问这个存储空间。

1、变量初始化:

注意:初始化与赋值不是同一个概率。一个调用构造函数,一个调用赋值操作符。

关于内建类型,若没有显示滴初始化,当它是非局部变量时,会初始化为0;否则不会初始化,也就是说,它将会是一个随机值。所以定义内建类型的变量时,最后同时也给一个初始化值。

初始化语法:

int a = 0; //1

int a = {0}; //2

int a{0}; //3

int a(0); //4

1、4是一样,2、3是一样。(花括号为c++11语法,列表初始化)。用列表初始化可降低隐式转换的风险。比如说:

double a = 3.14;

int b = a; 或者 int b(a); // 这种语法能通过编译。

但int b = {a}; 或者 int b{a}; //这种语法无法通过编译,double转换成int会造成信息丢失,列表初始化会将这种情况视为错误。

2、变量的声明与定义的关系

c++支持分离式编译,所以它的变量的声明与定义往往是分开的。关于声明和定义,我是这么理解的:声明,就是告诉编译器,这是个合法的变量,你可以去用它;定义,就是告诉编译器,要为此变量分配内存空间。

下面看看几种声明与定义的语法:

extern int a; // 声明而非定义

int a; //声明并定义

extern int a = 5; // 定义。(此语法出现在函数内时会报错)

3、引用

引用分为左值引用和右值引用。

这里介绍下左值引用。引用定义语法为int& a = b;要求定义时必须初始化。否则会报错。前面讲到了变量的定义实际上就是告诉编译器,为此变量分配内存空间,并关联变量名与此空间。而定义引用实际上就是关联变量名与指定的内存空间,跳过了分配空间这一步骤。它的效果是:为某一变量又起了一个别名。

引用要求类型完全匹配。如下面的语句将会报错double a = 3.4; int& b = a; // 类型不匹配。int &a = 10;这句也会报错,因为10是编译时常量,它并没有真正的内存空间,所以不能被引用。

4、指针

前面讲了,变量实际上就是给一个内存空间关联了一个名字。那么指针变量是什么呢?指针变量实际上就是为一个机器位长的内存空间(32位或64位)关联了一个名字。在一台机器上,所有的指针大小都一样(4字节或8字节),无论它所指的是什么类型。指针变量里面存的是一个对象的地址。下面看一个例子:

int* p; p = 0x12345678;

然后我们就可以通过*p来操作0x12345678中的数据了。这里有一个问题就是,这块内存是否合法,是否可读,是否可写,是否已经被其他变量占用。若贸然去修改某个地址里的值会引发不可量的后果,所以,使用指针时要特别小心,要确保它指向的是一个合法空间。

如何确保指针指向一个合法空间?

①用new语句去分配可用空间,用完后用delete释放空间

②指向某一合法变量。如int b = 8; int*p = &b;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值