day18_C语言_指针2

本文概述了C语言中数组指针、函数指针的基础概念,通过实例展示了如何利用它们创建转移表、回调函数以及简化代码。从数组指针到函数指针数组,再到指向函数指针数组的指针,一步步深入解析其在程序设计中的实用技巧。
摘要由CSDN通过智能技术生成

1.理解数组指针

数组指针是一个指针,指向的是一个数组

代码举例

#include<stdio.h>
int main()
{
    int i = 0;
    int arr[5] = { 0 };
    for (i = 0; i < 5; i++)
    {
        arr[i] = i;
    }

    int(*p)[5] = &arr;

    for (i = 0; i < 5; i++)
    {
        printf("%d ", *(*p + i));
    }

    return 0;
}


2.理解函数指针和定义

函数指针是指针,存放函数的地址,可以通过函数指针中存的地址找到对应地址的函数

代码举例:

#include<stdio.h>

void test()
{
    printf("HELLO WORLD\n");
}

int main()
{
    void (*p)() = &test;
    (*p)();
    return 0;
}

/*结果
HELLO WORLD

C:\Users\93983\source\repos\test\Debug\test.exe (进程 24256)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/


3.理解函数指针数组和定义,转移表

函数指针数组是数组,数组内的元素是函数指针,函数指针是指针,存放函数的地址,可以通过函数指针中存的地址找到对应地址的函数

转移表就是函数指针数组,可以解决代码冗余问题,可用于两个操作数一个运算符的简单计算器

代码举例:

#include<stdio.h>

void test1()
{
    printf("HELLO WORLD_1\n");
}
void test2()
{
    printf("HELLO WORLD_2\n");
}
void test3()
{
    printf("HELLO WORLD_3\n");
}

int main()
{
    void (*arr[3])() = { &test1 ,&test2,&test3 };
    int i = 0;
    for (i = 0; i < 3; i++)
    {
        (*arr[i])();
    }
    return 0;
}
/*
HELLO WORLD_1
HELLO WORLD_2
HELLO WORLD_3

C:\Users\93983\source\repos\test\Debug\test.exe (进程 19244)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/


4.理解指向函数指针数组的指针和定义

指向函数指针数组的指针是指针,存放的是函数指针数组的地址,函数指针数组是数组,存放的是函数指针的地址,函数指针是指针,存放的是函数的地址

代码举例

#include<stdio.h>

void test1()
{
    printf("HELLO WORLD_1\n");
}
void test2()
{
    printf("HELLO WORLD_2\n");
}
void test3()
{
    printf("HELLO WORLD_3\n");
}

int main()
{
    void (*p1)() = &test1;
    void (*arr[3])() = { &test1 ,&test2,&test3 };
    void (*(*p)[3])() = &arr;

    int i = 0;
    for (i = 0; i < 3; i++)
    {
        (*(*p)[i])();
    }
    return 0;
}
/*
HELLO WORLD_1
HELLO WORLD_2
HELLO WORLD_3

C:\Users\93983\source\repos\test\Debug\test.exe (进程 25336)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/


5.理解回调函数的使用

回调函数可以减少代码冗余,回调函数的参数是函数指针

代码举例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}


int Calc(int (*pf)(int x, int y))
{
    int x = 0;
    int y = 0;
    printf("输入操作数:");
    scanf("%d %d", &x, &y);
    printf("%d\n", pf(x, y));
}

int main()
{
    int a, b;
    char ch;
    printf("请输入运算符:>");
    scanf("%c",&ch);
    switch (ch)
    {
    case '+':
        Calc(Add);
        break;
    case '-':
        Calc(Sub);
        break;
    default:
        printf("输入错误\n");
        break;
    }
    return 0;
}


6.练习使用qsort函数排序各种类型的数据。

 

 


7.模仿qsort的功能实现一个通用的冒泡排序。

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值