c++ 指针和引用 简介

学习地址:零基础学C++……

指针简介

指针是一个值为内存地址的变量(或数据对象)
指针保存的是地址
声明指针时未初始化则内存地址随机分配
在这里插入图片描述

使用变量名直接获取数据效率高, 因为指针取值还要查找地址

指针基本用法

声明:数据类型 * 指针变量名;

int num = 10;
int* ptr_num;
ptr_num = #

不允许int * num=0x123456;

在这里插入图片描述
根据地址找值

char ch = ‘a’;
char * ptr = &ch;       
cout<<(void *)ptr<<’\t’ << *ptr<<endl;   //(void *)为任意类型

空指针:

空指针不指向任何对象,在试图使用一个指针前应检查是否为空
声明指针时未初始化会有危险(因为指针会有随机的默认值,称为野指针)

int *ptr1=nullptr;  //等价于int *ptr1=0;

//需要包含cstdlib库
int *ptr2=NULL;

nullptr可以转换任意指针类型

void *指针

一种特殊的指针类型,可以存放任意对象地址
作用:
1 和别的指针进行比较
2 作为函数参数(传递任意类型的指针参数)
3 赋值另外的void指针

double objNum = 3.14;
double * ptr_obj = &objNum;
void *vptr_obj = &objNum;
cout << (ptr_obj == vptr_obj) << endl;

输出为1

在这里插入图片描述
在这里插入图片描述

引用 :为对象起了另外的一个名字(引用即别名)

1 引用必须被初始化
2 底层通过指针实现

在这里插入图片描述

指向常量的引用是非法的 , 要改成

const int &num=100;

引用比指针效率高,因为指针使用时会先验证地址存不存在
引用实际上是指针 原理一样,效率不一样

指针和数组:

在这里插入图片描述

score数组五个元素,double类型8字节,因此sizeof(score)=40;
指针(地址)类型用四个字节表示

数组名就是数组的首地址

指针的算术运算:

1、指针的递增和递减(++、–):一个T类型的指针的移动以sizeof(T)为单位

double score[] = {98,87,65,43,76};

在这里插入图片描述

2、指针加上或减去某个整型值: 以sizeof(T)为单位

指针和数组小结:

数组命就是连续内存单元的首地址
Num的值与&num[0]的值相同
指向指针数组的指针赋值:

int *ptr_num=num;
//或者
inr *ptr_num=&num[0];

数组名不能参与加减运算

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值