以前对指针数组和数组指针的概念,很模糊,今天看到了一篇觉得讲的很好,所以就写下来和大家分享
数组指针:
int(*p)[5]: p是数组指针,表示定义了一个指向多维数组的指针,即p指向的是一个数组,这个数组有5个元素。 对指针p 的赋值必须是4个int元素的数组地址,即只要包含4个元素的地址的都可以赋值给p,不管这个 数组有多少行,但列数必须是4,例如:int a[4], int b[5][4]都可以赋值给p,赋值方式为:p = &a,p=b;
指针数组:
int *p[5]: 定义了一个指针数组,表示每个数组元素都是一个指针元素,例如:p[1] = &i; p[1]指向一个int元素的地址, *p[1]则表示所指向元素的值。
常量指针:
是指--指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过 指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而指向另一个常量。
例如:int a=45;
const int *p=&a; //或者 int const *p=&a;
*p=50;//是错误的,因为是指向常量的指针。
int b=5;
p=&b;//这是正确的,因为指针本身保存的地址是可以被改变的
指针常量:
是指--指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。
例如 int a=20;
*p=25;正确的,可以
int b=25;
p=&b;这样是错误的,因为是指针常量,所以不允许改变指针的值