指针?数组?

相信不少简单了解c语言的人都知道数组和指针,那么他们两个结合到一起是什么呢?我们来做个浅析:

  1. 指针数组
    在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)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值