这个up主写的真好“爱上半导体”——>下面是她的链接。
从计算机底层认识指针!深入理解C语言指针!_哔哩哔哩_bilibili
指针里保存的是同一程序里,另一个变量对应的内存地址。
指针的用途是提供间接访问。
原来我们只有一种访问途径——我们是通过变量名,比如变量a,它在内存中对应的地址是100号单元。我们如何访问100号单元呢?我们是通过变量名,只要我们提到变量a,C++就知道去100号单元里去访问数值。
而有了指针之后,我们就为访问100号单元提供了额外的途径。我可以把a变量的地址100放在一个指针变量里面。然后告诉C++,你去访问这个指针变量里面保存的内存地址里面的内容。这种访问方式就叫间接访问。
定义指针变量:类型名 *指针变量名(类型名:这个地址里保存的内容是一个什么类型的数据)
我们定义指针变量,要确认三件事!
第一件事:这个变量名字叫什么。
第二件事:这个变量里面保存的是一个内存地址 ,它是一个指针。
第三件事:它保存的这个内存地址里面保存的数据是一个什么类型的值。 因为你通过指针去访问的时候,你找到了这个内存单元,通过这个内存地址,我读几个字节的内容呢?就取决于你这个单元里面保存的是什么类型的数据,比如这个内存单元里保存的是一个字符,那我读一个字节就可以了。如果我读的是一个整型int类型的数, 在我的编译器里int占四个字节,那我就从这个地址开始读四个字节的内容。如果我保存的是double类型的数据,在我的编译器里double占八个字节,那我就从这个地址开始读吧个字节的内容。所以通过指针间接访问的时候,我们必须知道这个单元里保存的是什么类型的数据,我们才可以知道读几个字节的内容。因此我们在定义指针变量的时候,我们还要告诉它,这个地址里保存的数据是什么类型的。
int *p 中的 星 的意思是告诉我们p是个指针变量,要和 int p 这种正常变量区分开。
int 告诉C++编译器,这个地址里面保存的是一个整型数。所以你要访问这个变量里面保存的地址里面的内容的时候,你从这个地址开始要读四个字节出来,然后把这四个字节的内容解析成一个整型数。