在正文之前先讲一下指针既然存的是一个地址,为什么指针还需要数据类型来修饰呢?
指针的数据类型的意义
之前所见的整型变量等常规变量中,数据类型是为了方便分配合适的内存空间,但是不同数据类型的指针在内存中的占用空间大小通常是相同的,在32位系统中,通常指针大小为4字节;在64位系统中,指针大小为8字节。
可以看到不同数据类型的指针在内存中的占用空间大小相同,那么指针的数据类型意义是什么?
指针的实质是一个内存地址,从这个角度可以认为指针没有类型,但这个地址指向的内存是可以存放任意类型数据的,如int* 可以存放int类型的数据,char*可以存放char类型的数据,从这个角度可以认为它是有类型的。
数据类型最主要的作用是当使用指针进行解引用操作(通过指针访问它指向的内存中的值),编译器需要知道如何正确地解释那一块内存。比如当对指针进行算术运算时,编译器需要知道指针所指向的数据类型的大小,以正确计算偏移量。
指针常量
指针常量可以理解为一个常量,前面的指针两个字理解为修饰,比如漂亮妹妹,妹妹是主体,漂亮是修饰词。
现在来看指针常量的特点:指针的指向(也就是另一个内存的地址)不可以更改,指针指向的值(另一个内存的存储的内容)可以改。
遵循指针的定义技巧“从指针标识符开始,由里到外地读,const修饰最靠近它的那个”。
“int* const p = &a;”中指针标识符是*,从里到外(向两边延展)看到const修饰变量p,那么此时p相当于常量,不能改变了,最前面的int代表该指针指向的内容是int型。
注意:在定义指针常量和常量指针时,必须为其赋予一个合法的初始值。如果没有初始化,指针所指向的内存单元是未知的,可能会导致程序出错或崩溃。
常量指针
常量指针本质是指针,这个指针是一个指向常量的指针,指针的指向可以修改,但指针指向的值不可以修改。
“const int* p = &a;”中的指针标识符是*,从里到外(向两边延展)看到const修饰的是int,表示所指向的内容是常量,即该指针所指向的内容不能被修改。
小白学习过程中的个人理解记录,不足之处还请大佬指正!