【C】无类型指针及函数指针

server/2024/11/14 12:49:52/

一、无类型指针

(1)无类指针只包含内存地址,不知道内存地址从存放数据是什么类型:
        void *ptr=NULL;

(2)可以其他类型赋给无类型指针,但是无类型指针赋给有类型指针会警号;
        不可通过*ptr获取里里面的内容,如要赋值必须强制转化
         p_ch=(char *)ptr;//这样比较好

(3)void* 通常用在函数的参数中,给函数参数带来很大的灵活性,当函数参数是void*,可以接受任意数据地址,但无法判断是什么类型,可以加个类型判断
void test(void *data,int type)
{
    if(type==1)
    {
        printf("%c\n",*((char*)data));//字符型
    }
    else if(type==2)
    {
        printf("%d\n",*((int *)data));//整型
    }
    else if(type==3)
    {
        printf("%d\n",((STU*)data)->age);//结构体型
    }
}


二、指针数组

1.定义一个数组,专门存放整形指针,相当于一维数组
 int *p[5];

char  (*pmenu)[10],menu[5][10]=
{"aaa","bbbb","ccc",”dd","ee"};
pmenu=menu;
for (i = 0;i < 5;i++){
    puts(pmenu[i]);
}

  

2.定义指针,专门指向包含5个元素的一维指针数组,像当于二维数组    
int (*p_array)[5]=p;

char  *pmenu[5],menu[5][10]=
{"aaa","bbbb","ccc",”dd","ee"};
for (i = 0;i < 5;i++)
    pmenu[i] = menu[i];
for (i = 0;i < 5;i++)
    puts(pmenu[i]);

3.函数指针(常用)
    (1)定义:
                函数指针,一个指针专门指向函数地址
                p_fun定义一个函数指针,指向int有返回值,并且参数就一个整数函数
                int (*p_fun)(int )=NULL;
    (2)赋值:
                把getMax函数地址赋给p_fun;
                p_fun=test;
    (3)调用这个函数:
              getMax(10);//方法1
              p_fun(1200);//方法2

4.函数指针,定义一个数组,定义一个数组,里面每个元素存放一个函数指针
    //这里面存放5个
    int (*p_funArray[5])(int)={getMax,test,pos_win,reg_win,manager_win};
    b=p_funArray[2](a);

函数指针的例子:

#include<stdio.h>int getMax(int a)
{
//	printf("%d\n",a);printf("getMax!\n");return a+1;
}
int test(int parm)
{printf("hello,world!\n");
//	printf("%d\n",parm);return parm+1;
}
int pos_win(int max)
{printf("pos_win!\n");return max+1;
}
int reg_win(int max)
{printf("reg_win!\n");return max+1;
}
int manager_win(int max)
{printf("manager_win!\n");return max+1;
}int main()
{int a=0,b=0,c=0;//定义一个数组,里面每个元素存放一个函数指针//这里面存放5个int (*p_funArray[5])(int)={getMax,test,pos_win,reg_win,manager_win};while(1){b++;c=p_funArray[b]();printf("b=%d\n",b);//	getch();}}

 


http://www.ppmy.cn/server/141251.html

相关文章

13.UE5流星火雨,引导施法技能制作

2-15 流星火雨&#xff0c;引导施法技能制作、随机数_哔哩哔哩_bilibili 目录 1.为流星火雨添加按键映射 2.创建流星火雨的动画蒙太奇 3.实现播放动画蒙太奇的逻辑 ​编辑 4.定义发射一波流星火雨的发射物 5.使用动画通知释放流星火雨 1.为流星火雨添加按键映射 创建名为流…

#渗透测试#SRC漏洞挖掘#Python自动化脚本的编写04之通过面向对象编程学生管理信息系统01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

优选算法第六讲:模拟

优选算法第六讲&#xff1a;模拟 1.替换所有的问号2.提莫攻击3.Z字形变换4.外观数列5.数青蛙 1.替换所有的问号 链接: link class Solution { public:string modifyString(string s) {//遍历字符for(int i 0; i < s.size(); i){if(s[i] ?){for(char ch a; ch < z;…

Webserver(5.4)项目整体

目录 http_conn.hhttp_conn.cpplocker.hmain.cppthreadpool.h编译并创建线程池 http_conn.h #ifndef HTTPCONNECTION_H #define HTTPCONNEVTION_H #include<sys/epoll.h> #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<signa…

数据分析-41-时间序列预测之机器学习方法XGBoost

文章目录 1 时间序列1.1 时间序列特点1.1.1 原始信号1.1.2 趋势1.1.3 季节性和周期性1.1.4 噪声1.2 时间序列预测方法1.2.1 统计方法1.2.2 机器学习方法1.2.3 深度学习方法2 XGBoost2.1 模拟数据2.2 生成滞后特征2.3 切分训练集和测试集2.4 封装专用格式2.5 模型训练和预测3 参…

ubuntu 安装 mongodb 笔记记录

https://www.mongodb.com/try/download/community 以上是下载地址 查看系统 (base) duyichengduyicheng-computer:~$ cat /proc/version Linux version 6.8.0-48-generic (builddlcy02-amd64-010) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU …

ZABBIX API获取监控服务器OS层信息

Zabbix 是一款强大的开源监控解决方案,能够通过其 API 接口自动化管理和获取监控数据。在这篇文章中,详细讲解如何通过 Zabbix API 批量获取服务器的系统名称、IP 地址及操作系统版本信息,并将数据保存到 CSV 文件中。本文适合对 Python 编程和 Zabbix 监控系统有一定基础的…

CelebV-Text——从文本生成人脸视频的数据集

概述 近年来&#xff0c;生成模型在根据文本生成和编辑视频方面受到了广泛关注。然而&#xff0c;由于缺乏合适的数据集&#xff0c;生成人脸视频领域仍然是一个挑战。特别是&#xff0c;生成的视频帧质量较低&#xff0c;与输入文本的相关性较弱。在本文中&#xff0c;我们通…