与指针有关的各种说明和意义见下表。
int *p; p为指向整型量的指针变量;
int xdata *p; 存在外部数据RAM;
int data *p; 存在内部数据RAM;
int code *p; 存在程序代码空间;
int data *xdata p; 外部RAM指针,指向内部RAM整形数据
int xdata *data p; 内部RAM指针,指向外部RAM整形数据
int *p[n]; p为指针数组,由n个指向整型量的指针元素组成。
int (*p)[n]; p为指向整型二维数组的指针变量,二维数组的列数为n
int *p() p为返回指针值的函数,该指针指向整型量
int (*p)() p为指向函数的指针,该函数返回整型量
int **p p为一个指向另一指针的指针变量,该指针指向一个整型量。
{ int x;
int *px;
//下面这些表示虽然很烦,但是生成的代码却及其简洁:
//将 xdata 型指针 0x4000 赋给 px
px=(int xdata *)0x4000;
//表示从 xdata 0x4000处取一个 char 给x
x=*((char xdata *)0x4000);
}
阅读组合说明符的规则是“从里向外”。
从标识符开始,先看它右边有无方括号或园括号,如有则先作出解释,再看左边有无*号。 如果在任何时候遇到了闭括号,则在继续之前必须用相同的规则处理括号内的内容。例如:
int*(*(*a)())[10]
↑ ↑↑↑↑↑↑
7 6 4 2 1 3 5
上面给出了由内向外的阅读顺序,下面来解释它:
(1)标识符a被说明为;
(2)一个指针变量,它指向;
(3)一个函数,它返回;
(4)一个指针,该指针指向;
(5)一个有10个元素的数组,其类型为;
(6)指针型,它指向;
(7)int型数据。
因此a是一个函数指针变量,该函数返回的一个指针值又指向一个指针数组,该指针数组的元素指向整型量。