C++从入门到精通2:变量下

本文详细介绍了C++中的变量、引用、指针概念,包括复合类型、引用的声明与使用、指针的申请与解引用、空指针、void*指针以及类型别名、auto和decltype的运用。还涉及自定义数据结构如Sales_item的定义。
摘要由CSDN通过智能技术生成

C++从入门到精通2:变量下

复合类型

复合类型是基于其它类型定义的类型
此处介绍引用和指针

引用

引用类型是将对象绑定到一个别名上,之后可以通过这个别名访问对象
声明的时候再变量名前加上&表示这是一个引用类型

int y = 1024;
int &x = y; // 创建对y引用
int &z; //报错!!引用必须被初始化

一般的变量在赋值时是将被赋的值复制到变量的内存中。但是引用的创建是直接指向被赋值变量的内存,并不创建被赋值变量的副本。因此引用在创建时必须指向一个变量,并且不能更改。

int reused = 42;  
  
int main()  
{
     
    int &val = reused;  
    cout << val << endl;  
    val = 100;  //实际修改的是reused的值
    cout << reused << endl;  //打印的是100
    return 0;  
}

输出

42
100

为引用赋值,实际上是把值赋给了引用绑定(bind) 的对象。同理将引用作为初始值实际上是以与引用绑定的对象作为初始值。
引用绑定的对象必须是变量且需要类型匹配。

int &refVal4 = 10; //错误:绑定到常量
double dval = 3.14;
int &refVal5 = dval; //类型不匹配

指针

申请指针

指针是指向另外一种类型的复合类型。与引用不同的是,指针是一个单独的对象,或者说是指针变量,而引用只是所绑定对象的一个别名。因此指针可以不被初始化,并且指向的对象可以被修改。
定义指针只需在变量名之前加上*

int ival = 42;
int *p = &ival; //指针变量p的值为ival的内存地址

获取存放变量的内存地址需要使用取地址操作符&于变量前。由于引用不是对象,所以没有地址,不能创建指向引用的指针。
指针对象指向的变量类型需要匹配。

double dval;
double *pd = &dval;// 正确
double *pd2 = pd; //正确

int *pi = pd; //错误,类型不匹配

使用指向无效值的指针变量可能会引发严重的错误,因此在使用指针变量时应该总是保证其指向有效的内存地址。

利用指针访问对象

对指针变量前加解引用运算符来访问指针变量指向的内容:

int ival = 42;
int *p = &ival;  
cout << *p << endl;  
(*p) = 12;  
cout << ival << endl;

输出

42
12

空指针

空指针即不指向任何对象的指针。声明空指针方法如下:

int *p1 = nullptr;
int *p2 = 0;
//需要包含头文件cstdlib
int *p3 = NULL;

需要注意的是不能直接将int类型的值赋给指针。

void*指针</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值