C++指针介绍

146 阅读2分钟

启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

之前聊了C++的引用,是一种给已存在对象起别名的引用类型,C++当中还有一种叫做指针的复合类型,也可以实现对其他对象的间接访问。那么我们就来聊聊C++的指针吧。

指针定义

这里需要先了解一下计算机存储的概念:计算机的内存可以看作是一个紧密排列的数据序列,每一小块数据序列,每一小块数据(也就是字节)的旁边都有一个编号代表数据地址。就好像在生活当中的房子的地址是类似的,不论谁住在这个房子里,这个房子始终会有一个固定的地址(哎,租房的朋友们是不是很有感触)。

指针(Pointer),从其英文字面上来理解就是一个指向某一物件的东西,在程序中就是指向数据的地址(Address)。和之前聊的引用相比,首先二者都可以实现间接访问其他对象的功能,但是相较于引用:

1、就是一个对象,可以进行赋值和拷贝,并且可以指向不同的对象,而引用只是一个别名。

2、指针可以不定义初始值,引用不可以(之前试过)

当然这是目前了解到二者定义来区分的,在之后的学习当中还会有很多涉及到的区别,需要一起总结。

声明

先上一段代码吧。

#include <iostream>
#include <typeinfo>
​
using namespace std;
​
int main(){
   int num = 1;
   int *p;  //声明一个指针
   int *d = &num; //声明一个指针指向num对象,但是num需要使用取地址符。
​
   cout << num << ":" << typeid(num).name() << endl;
   cout << d << ":" << typeid(d).name() << endl;
   cout << *d << << endl; //指针使用解引用符指向对象
   
   return 0;
}

这里要注意的是:

1、声明指针只需要再变量前面加*,但是指针具体指向一个地址的时候,需要对被指向的对象使用取地址符(&) ,这里要和引用区分开来。

2、指针确实指向的是地址,但是也可以指向访问对象,这个使用就需要使用解引用符(*)

3、指针也是需要类型对应的,一个int类型的指针是无法指向一个char类型的变量的。

4、更要注意的是,我们最近频繁使用的 &,*再不同情况下的含义是不一样的,一定要练习区分:

int num = 1;
int &i = num; //这里&代码引用
int *p; //这里*代表指针
p = &num; //承接上一步,这里&代码取地址符
cout << *p << << endl; //这里*是解引用符