认认真真看完,教不会你砍我
1.这6个玩意可以分为两类。
①指针常量,指针数组,指针函数
②常量指针,数组指针,函数指针。
2.直接上结论,哪个词在后,这玩意就是个啥
3.看第一类①指针常量,指针数组,指针函数。
常量/数组/函数在后,这三个本质就不是指针。就好比“快乐少年”本质是少年,快乐只是形容词。
3.1指针常量:首先他就是个常量!指针是形容词。指针类型的常量,就是这个常量的值得是个地址。就好比 int * a一样,a的值就得是一个int类型的地址。
定义为int *const p
; //p是个常量,常量的值是个int的指针,指针值不能变,所以指向不能变
3.2指针数组:就是个数组,数组之间有啥区别?就是成员不同,int a[8],数组的成员是int元素。char a[8],数组的成员是char元素。那int * p[8]
呢?就是数组元素都是指针喽
3.3指针函数:就是个函数。函数见能有啥区别?返回值类型不一样。int型函数,返回值为int类型,float型函数,返回值为float类型。那int * p(void)
,就是函数返回值为指针喽
4.在看第一类②常量指针,数组指针,函数指针。
根据结论,谁在后面就是谁。这三都是指针。区别就是指针类型不同,就跟int型指针 double型指针的区别一样。
4.1常量指针,首先常量是啥?它是一个修饰int double char 的字符的修饰。意义就是不能变!为啥不能变,看我之前的帖子。const int *p
就是把某一个类型的指针,给弄成常量型的了,这个指针指向一个常量。所以指针指向的值不能变
4.2数组指针,数组是啥?一堆元素组成的集合。那int *p 是指向int型的指针,那是不是得有个指针也能指向数组呢?这就是数组指针 int (*p) [8]
这玩意在二维数组中的较多。就是一个指向数组的指针
4.3函数指针:函数是啥?是一种运算方式,我们把这个运算方式可以看成一个变量,和int a 的a一样。那是不是也应该有个指针能指向他呢?void (*p)()
,这就是函数指针的定义了。
4.1 4.2 4.3的定义写法,要么*
两边有括号,要么*
离变量最近。是因为本质都是指针,所以*
优先级高
3.1 3.2 3.3 定义写法 离p最近的都不是*
,所以他就不是指针.
5.总结一下
①从文字上来说,指针常量,常量指针…哪个字在后面这玩意就是哪个
②从定义来说 int * const p const int *p…*和其他
谁离p(变量)近,这玩意就是谁
至于他们6个的用法,在此不做介绍