学习地址:零基础学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];
数组名不能参与加减运算