指针数组与数组指针的认识

1.·指针数组

回顾:
   int arr[5];   整型数组,表示数组中每一个元素都是一个int类型
   char arr[5];   字符数组,表示数组中每一个元素都是char
   struct Student ss[5];    结构体数组,表示数组中每一个元素都是一个结构体
   指针数组:表示数组中的每一个元素都是一个指针

1.1定义

数据类型* 数组名[数组长度];
如:

int* pArr[5];     ->表示一个具有5个元素的数组,数组中每一个元素都是int* 类型的;

2.数组指针

2.1概念

首先区别一下:指针数组:首先是一个数组,然后数组中每一个元素是个指针

字符指针
:用来指向一个字符的指针 
整型指针:用来指向一个整型变量的指针
数组指针:用来指向一个数组的指针
结构体指针:指向一个结构体变量的指针

2.2格式

数据类型 (*变量名)[数组的长度]
如:
int* arr[5];      //表示指针数组->一个具有5个元素长度的数组,数组中每一个元素都是int*类型
int(*arr)[5];  // 表示数组指针->首先是一个指针,一个指向 具有5个int类型元素的数组 的指针

3.函数指针

3.1 概念

数组指针:指向数组的指针
函数指针:指向函数的指针

3.2格式

函数的格式: 返回值类型  函数名(形参)
函数指针的格式
: 返回值类型 (*函数指针名)(形参)

3.3 举例

 int* fn(int i);表示fn 是一个函数,一个具有int类型形参和int*类型返回值的函数
 int *fn)(int i;表示fn是一个函数指针,一个指向具有int类型形参和int类型返回值函数的指针
 练习:
  编写一个用于给指定数组元素进行排序的函数;如:
  void sort(int arr[],int len)
  {
  从大到小排序;
  }
  扩展:
  man signal
函数的介绍:  #include <signal.h>
       typedef void (*sighandler_t)(int);
       sighandler_t signal(int signum, sighandler_t handler);
函数的解析
           typedef void (*)(int) sighandler_t;
           =>typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
=>void (*)(int)  signal(int signum,void (*)(int) handler)
=>void (*signal(int signum,void (*handler)(int)))  (int)
=>signal是一个函数,一个具有整型参数和函数指针参数的函数,并且这个函数的返回值类型也是一个函数指针
第二个形参:一个函数指针,指向 参数为int,返回值为void 的函数
返回值一个函数指针,指向参数为int,返回值为void的函数

4 .指针小结:

 4.1类型

int i;定义一个整型变量
int* p;定义一个指向int类型变量的指针
int arr[n];定义一个具有n个int类型元素的数组
int* pArr[n];定义一个具有n个int*类型元素的数组
int*qArr[n];定义一个指针指向一个长度为n,元素为int类型的数组


int  fn(void);定义一个不需要形参,返回值为int类型的函数
int* fn(void);定义一个不需要形参返回值为int* 的函数
int *fn)(void;定义一个指针,指向无参并且返回值为int的函数


int** ppi;二级指针,指向一个保存整型变量地址的一级指针

4.2特殊指针

int* p; //野指针
int* p = NULL; //空指针
void* p;  //通用指针

5 .main 函数的原型

int main(int argc,char* argv[])

5.1函数的描述

第一个参数表示:运行程序时参数的个数;第二个参数表示:存储每一个参数的首地址

5·2 举例

 当输入 :./a.out abc 123
  main 函数中:argc = 3;argv保存地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值