数组?指针?

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身 决定。它是储存指针的数组”的简称。

数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节, 至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。

例:①int *p1[10];

        ②int (*p)2[10];

“[]”的优先级比“*”要高。所以p1与“[]”结合,构成一个数组。我们之前了解到,数组元素的类型就是,去掉数组名和“[]”,剩下的就是数组元素的类型,那么①中数组元素的类型就变成了int *,没错,就是指针。而对于②,“()”的优先级比“[]”高,那么,p2就与“*”结合构成一个指针。对于指针来说,比如 int *p我们会说,p指向的内容的类型是整型,同样的去掉“*p"就是p所指向的内容,”int [10]“,说明它是指向的是一个的数组,数组元素的类型都是整型。

数组的地址如何存储?

int arr[10] = {0}

int*p1 = &arr;//?

int (*p2)[10] = &arr;//?

因为p2是数组指针,所以适合存放数组的地址。

函数指针:顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。

扫描二维码关注公众号,回复: 1158363 查看本文章

函数指针数组char* (*pf[3])(char* p);

这是定义一个函数指针数组。它是一个数组,数组名为 pf,数组内存储了 3 个指向函数的 指针。这些指针指向一些返回值类型为指向字符的指针、参数为一个指向字符的指针的函数。这是一个指针数组,是数组。

指向函数指针数组的指针(函数指针数组的指针):char* (*(*pf)[3])(char* p);

注意,上一节的 pf 并非指针,而是一个数组名; 这里的 pf 确实是实实在在的指针。这个指针指向一个包含了 3 个元素的数组;这个数字里 面存的是指向函数的指针;

char* (*pf[3])(char* p),首先从最里面的圆括号(未定义的标识符)看起,即(*pf[3]),前面我们说过”[]”的优先级高于“*”,所以,pf和“[]”构成了一个数组。数组有三个元素,再看pf左边,“*”,表示数组元素的类型是指针。(*pf[3])是一个“()”,说明数组元素指向函数,是函数指针,函数的参数类型呢是(char* p),返回值类型是char*。总结起来就是一个数组有三个元素是指针类型,指向函数。

char* (*(*pf)[3])(char* p),先未定义的标识符(*pf),由于“*”和pf结合构成一个指针,再看(*pf)右边是一个数组,表明这个指针指向有三个元素的数组,(*pf)左边“*”表明数组的元素类型是指针。再跳出圆括号,来到(*(*pf)[3])右边,看到的是一个“()”,表明这个数组指向的是一个函数,而这个函数的返回值是char*,参数类型是(char* p)。

 

猜你喜欢

转载自www.cnblogs.com/lsiyu/p/9111979.html