【C语言学习笔记】函数指针,二级指针,二维数组,数组指针,指针数组

目录

函数指针:

double(*p)(int)中的p是指向函数的指针

double*p(int)和double(*p)(int)的区别

二级指针:指向指针的指针

二维数组

数组的指针:

指针的数组:


 

函数指针:

本身是一个指针,该指针地址指向一个函数

例如:

int add(int x,int y)
{
return x+y;
}
int main()
{
int add(intx,inty);
int*p=&add;
int a=1,b=2,sum=0;
sum=p(a,b);
return 0;
}

double(*p)(int)中的p是指向函数的指针

例如

double fun(int n)
{
    int i;
    double j,sum=0;
    for(i=1;i<=n;i++)
    sum+=1/i;
    return sum;
}
int main()
{
    double fun(int n);
    double(*p)(int);
    p=&fun;//这里的&可加可不加
    print("%d",p(n));
    return 0;
}

double*p(int)和double(*p)(int)的区别

()的优先级大于*,所以前者是p(int)这个函数有一个参数,返回double*类型,返回一个double类型。后者是p为指针函数指向一个参数的函数返回的类型为double

二级指针:指向指针的指针

例如

int a=10;
int *p1=&a;
int **p2=&p1;

p1本来就有个地址1,且指向了a的地址2(这里的2个地址不一样)

int**p2=&p1他指向了p1的地址1

打印*p2,因为*p2是一个指针指向的是p1的地址,那么打印*p2就是打印*p2所指向的p1的地址下的内容即a的地址

打印**p2,因为*p2是a的地址,**p2就是取*p2的内容,就是a的地址下的内容即a的值

二维数组

a[3][4];

//第一行是a[0][0]  a[0][1]  a[0][2]  a[0][3]

//第二行是a[1][0]  a[1][1]  a[1][2]  a[1][3]

//第三行是a[2][0]  a[2][1]  a[2][2]  a[2][3]

a[0]的地址为第一行的首元素地址,取其内容就是a[0][0]的值,其余行类同

int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};

int(*p)[4]=a;

/*(与int *p[4]的区别是:首先()和[  ]的优先级相同都大于*

int*p[3];定义了一个数组,其中的每个元素p[0]、p[1]、p[2]都是指向int变量的指针。

int(*p)[3];定义了一个指针,这个指针是指向一个数组的。)*/

所以就有

数组的指针:

例:

int a[10]={10};

int *p=a;

指针的数组:

数组中所有的元素都有指针

printf("%d",*(*p+0)+0);//就是打印a[0][0]

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flamingo۶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值