c++(12)-引用与指针

  • 指针是一个变量
    • 值为一个内存地址,不需要初始化,可以保存不同的地址
    • 通过指针可以访问对应内存地址中的值
    • 指针可以被const修饰成力吊里或者指针变量
  • 引用只是一个变量的新名字
    • 对引用的操作(赋值,取地址等)都会传递到代表的变量上
    • const引用使其代表的变量具有只读属性
    • 引用必须在定义时初始化,之后无法代表其它变量

 typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为类成员名称时,其占用空间与指针相同4个字节

指针和引用的自增(++)运算意义不一样

#include <stdio.h>

int a = 1;

struct SV
{
    int& x;
    int& y;
    int& z;
};

int main()
{
    int b = 2;
    int* pc = new int(3);
    SV sv = {a, b, *pc};
    //int& array[] = {a, b, *pc}; // &array[1] - &array[0] = ?  Expected ==> 4
    
    printf("&sv.x = %p\n", &sv.x);
    printf("&sv.y = %p\n", &sv.y);
    printf("&sv.z = %p\n", &sv.z);
    
    delete pc;
    
    return 0;
}

125040_xV4s_3472252.png

在结构体中的引用可以看出取地址符得到的地址不连续。

引用数组是非法,因为会改变数组每个元素地址连续的特性。

 

转载于:https://my.oschina.net/u/3472252/blog/918684

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值