指针详解(下)

指针和数组
数组名是一个指向数组起始元素的常量指针。
p[i]相当于*(p+i)

int main()
{
   char str[6]={a,b,c,d,e,f};
   char src=0;
   src=str[0];//等价于src=*str
   src=str[1];//等价于src=*(str+1)
   src=str[3];//等价于src=*(str+3)
}
数组名str代表数组本身,类型是char [6]  ; 而作为指针,指向第0个元素单元,类型为int *。

1.指针数组:存放指针的数组 (type * name[常量表达式])

int main()
{
   char *str[2]={"hello","world"};
   char *src="hello";
   strcmp(src,*str);
   strcmp(src,*(str+1));
}

str是一个指针数组,每个元素单元都是一个指针;而把str当作指针的话,str指向指针数组的第一个元素单元,类型为char **.

2.数组指针:存放数组地址的指针 (type (*name) [常量表达式])

int main()
{
   int arr[10];
   int (*p)[10]=&arr;//p是一个指向由整型数据组成的数组的指针
   char *arr[10];//arr是一个指针数组
   char* (*p)[10]=&arr;//*p存放数组的地址

3.指针,数组传参
一维数组传参

int main()
{
   int arr[10]={1,3,5,7,9};
   int *p[15]={0};
   Reverse(arr);
   Print(p);
   return 0;
}

这里写图片描述

这里写图片描述

一级指针传参

当函数的部分参数为一级指针时,函数能接收的参数:一维数组;一级指针;对变量取地址。
int arr[5];----test(arr);
int *p=NULL;----test(p);
int c=5;----test(&c);

二维数组传参

int main()
{
   int arr[2][3]={0};
   Test(arr);
}

这里写图片描述

二级指针传参

当函数的部分参数为二级指针时,函数能接收的参数:指针数组;二级指针;对一级指针取地址。
int **p=NULL;---test(p);
int *ptr=NULL;---test(&ptr);
int * arr[16];---test(arr);

指针和函数

函数指针
指向函数的指针变量,包含函数在内存中的地址。(返回值类型 ( * 指针变量名) ([形参列表]);)

void Link(int n,char c);//声明一个函数
void (*p) (int char);//声明一个函数指针
p=Link;//将Link函数的首地址赋给指针p

函数指针数组
函数指针数组是一个其元素是函数指针的数组。

int main()
{
   int add(int a, int b);
   int sub(int a, int b);
   int mul(int a, int b);
   int div(int a, int b);
   int(*p[4])(int x, int y) = { add, sub, mul, div };
}

函数指针的数组的指针

int main()
{
   int(*p[4])(int x, int y) = { add, sub, mul, div };
   int (*(*ptr[4]))(int x, int y)=&p;

ptr是一个指针,该指针能够指向一个数组,该数组是一个函数指针的
数组,数组的每一个元素是一个函数指针,该函数指针指向一个参数为int,int,返回类型为int的一个函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值