C语言基础之指针进阶

1,数组指针与指针数组

数组指针

数组指针实质上还是指针,不同之处在于它是指向数组的,多用于二维数组
如下例,int (p) [3]就是一个数组指针,可以指向第二维维度为3的二维数组,并给出了两种同样功能的初始化方式;p++后,则由arr[0]变为指向arr[1];同时,二维数组解引用时需要 ’ * * ’

#include <stdio.h>
int main()
{
    int arr[2][3] = {{1,3,5},{2,4,6}};      
//  int (*p)[3] = &arr[0];
    int (*p)[3];
    p = arr;

    printf("*p = %d.\n",*(*p));
    p++;
    printf("*p = %d.\n",**p);
    return 0;
}

指针数组

指针数组,比如int *p [3] 实质上就是定义了三个指针,分别为p[0],p[1],p[2],可以将它们拿来单独使用
如下例:

#include <stdio.h>

int main()
{
    int i=0;
    int arr[3]= {1,3,5};        

    int *p[3] ;
    p[1] = &arr[0];
    p[2] = &arr[1];
    p[3] = &arr[2];
    for (i=1; i<4; i++)
    printf("p[%d] = %d\n",i,*p[i]);
    return 0;
}

指针函数与函数指针

指针函数

本质是一个函数,它的返回值类型是一个指针

如下例:

#include <stdio.h>

int* fun(int *a)
{
    return a;
}

int main(void)
{
    int a = 3;
    printf("%d", *(fun(&a)));
    return 0;
}

函数指针

本质是一个指针,这个指针指向的是一个函数
#include <stdio.h>
//比较两个数的大小 
int func (int a,int b)
{
    if (a<b)
    return b;
    else
    return a;
}

int main (void)
{
    int (*p)(int,int); //定义了一个函数指针 
    p = &func; //指向函数 
    int a;
    a = (*p)(2,8); //调用函数 
    printf("较大的数是 %d\n",a);

    return 0;
}

其中,定义函数指针时,要注意类型与函数的类型一定要匹配,比如上例,函数是int func (int a,int b),其中,func是函数名,int (int a,int b)是函数的类型名;所以定义指向它的指针时,类型名要一致,也是int (int a,int b),(*p)将p定义为一个指针,根据C语法规则,写为int ( *p) (int a,int b),其中,a,b为形参,不写也可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值