指针和引用

内存地址
程序运行时,代码和需要的数据都被存储在内存中。
内存是有序的字节序列,每个字节都有唯一的地址,使用该地址可以确定字节的位置,用于存储和获取数据。
直接访问:通过变量的名字直接访问为程序中定义的变量分配的内存单元,存取变量的值。
间接访问:使用变量的内存地址找到存放数据的单元,间接访问其中的内容。
取地址运算符&:指针存放指定类型对象的地址,要获取对象的地址,使用取地址运算符&。
指针解引用运算符“”:如果指针指向一个对象,则可以通过指针间接访该对象,使用指针解引用运算符“”。
指针基本概念实例:

#include<iostream>
using namespace std;
int main()
{	   
    int ival=1024;
    int *pi=&ival;
    cout<<"sizeof(pi):"<<sizeof(pi)<<endl;//指针在内存中所占大小
    cout<<"sizeof(ival):"<<sizeof(ival)<<endl;//ival在内存中所占大小
    cout<<"&pi:"<<&pi<<endl;//指针在内存中的地址
    cout<<"pi:"<<pi<<endl;//指针中存放的内容,即ival的地址
    cout<<"&ival:"<<&ival<<endl;//ival的地址
    cout<<"*pi:"<<*pi<<endl;//指针所指内存中存放的内容,即ival的值
    cout<<"ival:"<<ival<<endl;//ival的值
    }

指针的类型:即指针指向的类型
每个指针都有相关的类型,需要在定义指针时指出 type* pointer
指针不能保存非地址值,也不能被赋值和初始化为不同类型的地址值
空指针:指针值为0,即不指向任何对象的指针。

//生成空指针的两种方法
int *p1=0;
int *p2=NULL;

动态内存空间管理:

  • new
    new运算符:在堆上动态分配空间,创建对象,并返回对象的地址。一般将new返回的地址保存在

  • delete

  • 释放new分配的单个对象的delete形式:delete 指针;

  • 释放new分配的数组的delete形式:delete[ ] 指针;

  • 定义new没有对应的delete表达式

int *ip=new int ;
*ip=512;
delete ip;
*ip=10;//空悬指针;delete之后,继续通过ip间接访问这个单元是非法的,会引起不可预料的错误。

引用:引用又称为别名,它可以作为对象的另一个名字;通过引用可以间接的操纵对象;在程序中,引用主要用作函数的参数。
引用的定义:type& refVarible=leftValue;
引用必须被初始化,初始值是一个有内存地址的对象。
引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。
引用一旦初始化,就不能再指向其他的对象,对引用的所有操作都会被应用在它所指向的对象上。
引用必须指向一个对象,而且一直指向该对象,不存在“空”引用。
const限定指针:
指向const对象的指针(非const):
const type *cp;或 type const cp;(cp是指向常量的指针,它指向的内存中的内容不可以改变,即cp的值不可以改变)
指向非const对象的const指针:
type *const cp=initAddressValue;(cp是常量指针,初始化后值不能改变,指向固定的单元)
指向const对象的const指针:
const type *const cp=initAddressValue;
const限定引用:
const限定的左值引用不可修改;
const引用可以绑定到const对象,不能用非const引用指向const对象;
const左值引用可以绑定到非const对象,但是const引用不能用来修改它绑定的对象;
const左值引用可以绑定到生成右值的表达式,可以用任意表达式初始化const引用,只要表达式的结果能转换成引用的类型即可。

数组与指针
一维数组a[n]的元素a[i]在内存中的地址是a+i
二维数组a[m][n]的元素a[i][j]在内存中的地址是a+(i*n+j)
库函数begin()和end()
begin(数组名)
返回指向数组第一个元素的指针
end(数组名)
返回指向数组最后一个元素的下一个位置的指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值