关于指针数组和数组指针,指针常量和常量指针的区别,这两对组合我们经常会混淆。但在记忆这组过程中我发现对他们的翻译其实是很准确的,完全可以根据字面得出他们的含义和区别。
数组指针是数组修饰指针,本体是一个指针,这个指针指向的是数组。
例:int( * p)[n]; 表示了p这个指针指向了一个长度为n的int数组
指针数组则是指针修饰数组,本体是一个数组,这个数组的成员是指针。
可以这样理解:红苹果和苹果红。
红苹果:是指红色的苹果,指苹果,但苹果是红色的。
苹果红:是指颜色,一种红色。但这种红色是苹果的红色。
类似的苹果绿和绿苹果。通过这种记忆就可以分清楚这四者的区别:
指针数组:数组,但是数组的成员是指针。
数组指针:是一个指针,但是指向的是一个数组。
指针常量:本体是一个常量,这个常量是一个指针。
常量指针:本体是一个指针,这个指针指向的是一个常量。
对于指针常量和常量指针的说明:
指针常量根据上面的我们可以知道就说一个常量,这个常量其实是一个指针(地址),所以指针常量指向的位置不能改变,但对应地址的值可以改变;
常量指针则是这个指针指向了一个常量,这个指针指向的内容不能改变,但是可以改变指针指向。
而且我们能发现名称其实也是遵循书写逻辑的
int* p[n];//"*"在前"[]"在后 对应了名称指针数组
const int* p;//const在*前面即常量指针
int* const p;//*在const前面即指针常量
欢迎指正