|
凌阳教育的老师为您总结经常容易混淆的指针:
1、 int *a[10];
这是个指针数组,数组a中有10个整型的指针
a[0]~a[9]
2、int (*a)[10];
数组指针变量,它是个指针变量。它占4个字节,存地址编号。
它指向一个数组,它加1的话,指向下个数组。
3、 int **p;
这个是个指针的指针,保存指针变量的地址。
它经常用在保存指针的地址:
常见用法1:
int **p
int *q;
p=&q;
常见用法2:
int **p;
int *q[10];
分析:q是指针数组的名字,是指针数组的首地址,是q[0]的地址。
q[0]是个int *类型的指针。 所以q[0]指针变量的地址,是int **类型的
p=&q[0]; 等价于p=q;
例:
void fun(char**p)
{
int i;
for(i=0;i<3;i++)
{
printf("%s\n",p[i]);//*(p+i)
}
}
int main()
{
char *q[3]={"hello","world","China"};
fun(q);
return 0;
}
-----------------------------------------------------
------------------------------------------------------
1、int *f(void);
注意:*f没有用括号括起来
它是个函数的声明,声明的这个函数返回值为int *类型的。
2、int (*f)(void);
注意*f用括号括起来了,*修饰f说明,f是个指针变量。
f是个函数指针变量,存放函数的地址,它指向的函数,
必须有一个int型的返回值,没有参数。