指针 数组 函数之间的联系

指针数组
定义 int *p[n];
1.[]优先级高,先与p结合成为一个数组,
2.再由int*说明这是一个整型指针数组,
3.它有n个指针类型的数组元素。

数组指针
定义 int (*p)[n];
1.()优先级高,首先说明p是一个指针,
2.指向一个整型的一维数组,
3.执行p+1时,p要跨过n个整型数据的长度

总结:
数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。
指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
* ( p[ i ]+j )、* ( * ( p+i )+j )、( * ( p+i ) )[ j ]、p[ i ] [ j ]

函数指针
举例如下:

#include<stdio.h>
#include<Windows.h>
void function()
{
    printf("调用\n");
}
int main()
{
    void(*pfun)() = &function;
    (*pfun)();
    system("pause");
    return 0;
}

函数指针数组
拿一个数组,用它来放函数指针。

void (*fun[3])(int x);//函数指针数组
void (*fun)(int x);   //函数指针

举例:


#include <stdio.h>

void add(char *name)
{
    printf("Add %s successfully!\n",name);
}

void delete(char *name)
{
    printf("Delete %s successfully!\n", name);
}

void find(char *name)
{
    printf("Find %s successfully!\n", name);
}

void main()
{
    void(*funcPointerArray[3])(char *name);

    funcPointerArray[0] = add;
    funcPointerArray[1] = delete;
    funcPointerArray[2] = find;

    printf("Input 0~2 to execute the function:");
    int num;
    scanf("%d", &num);

    printf("Add some information:");
    char info[100];
    scanf("%s", &info);
    funcPointerArray[num](info);
}

可以避免写大量的switch case 语句。

指向函数指针数组的指针
指向函数指针数组的指针是一个指针指向一个数组数组的元素都是函数指针

void test(const char* str) 
{    
    printf("%s\n", str); 
} 
int main() 
{    
    // 函数指针 pfun    
    void (*pfun)(const char*) = test; 
    // 函数指针的数组 pfunArr  
    void (*pfunArr[5])(const char* str);  
    pfunArr[0] = test;   
    // 指向函数指针数组 pfunArr 的指针 ppfunArr  
    void (*(*ppfunArr)[10])(const char*) = &pfunArr;  
    return 0; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值