相信不少简单了解c语言的人都知道数组和指针,那么他们两个结合到一起是什么呢?我们来做个浅析:
- 指针数组
在c语言和c++语言中,数组元素全为指针的数组称为指针数组。
指针数组是数组,是一个存放指针的数组。数组的所有元素都为指针类型,在32 位系统中,指针占4个字节。
一维指针数组的定义形式为:“类型名*数组标识符【数组长度】”,
例如:
char *arr[3]={"hello","world","zhongguo"};
//arr就是定义的一个数组,它有三个元素,每个元素都是一个char *类型的指针。
如果是自己定义一个指针数组,搞不清楚运算符的优先级,那就加上小括号,比如定义一个指针数组:char *(arr[4])。
2.数组指针
数组指针,是指针。可以理解为“指针存放着一个数组的首地址”或者“这个指针指向数组的首地址”。
定义一个数组指针:
char (*pa)[3]
//()的优先级高,pa是一个指针,指向一个字符型的数组,这个数组的长度是3。
3.函数指针
指向函数的指针变量。
函数指针的声明方法:返回值类型(*指针变量名)(形参列表)
例如:
int func(int x);//声明一个函数
int (*f)(int x);//声明一个函数指针
4.函数指针数组
前面已经说到存放指针的数组叫指针数组,那要是把函数的地址存到一个数组中,那么这个数组就叫函数指针数组。我们先来定义一个函数指针数组:
int (*parr[10])(); //parr先和【】结合,说明parr是数组,而数组的内容就是
int (*)()类型的函数指针
5.指向函数指针数组的指针
估计好多童鞋看到名字就一脸懵逼了,我也是啊啊,哈哈,指向函数指针数组的指针实际上就是一个指针, 指针指向一个数组,数组的元素都是函数指针;
如何定义?
void test(const char* str)
{
printf("%s\n",str);
}
int main()
{
void (*pfun)(const char*) = test; //函数指针pfun
void (*pfunArr[5])(const char* str); //函数指针的数组pfunArr
pfunArr[0]=test;
void (*(*pfunArr)[10])(const char* )=&pfunArr; //指向函数指针数组pfunArr的指针ppfunArr
return 0;
}
最后再来整理一些c变量的定义方法:
一个整型数 int a;
一个指向整型数的指针 int *a
一个指向指针的指针,它指向的指针是指向一个整型数 int **a
一个有10个整型数的数组 int a[10]
一个有10个指针的数组,该指针是指向一个整型数的 int *a[10]
一个指向有10个整型数数组的指针 int (*a)[10]
一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int (*a)(int)
一个有10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int(*a[10])(int)

被折叠的 条评论
为什么被折叠?



