首页 > 其他分享 >进阶指针2

进阶指针2

时间:2022-10-22 22:42:00浏览次数:61  
标签:return 进阶 int void width printf input 指针

函数指针使用方法(转移表)

nt add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
void mune()
{
printf("**********1add 2,sub*********\n");
printf("**********3mul 4,div*********\n");
printf("*********** 0exit *************\n");
}

int main()
{
int(*parr[5])(int, int) = { 0,add,sub,mul,div };
int input = 0;
int x;
int y;
do
{
mune();
printf("xuanze\n");
scanf("%d", &input);//选择算法
if (1 <= input && input<= 4)
{
printf("选择两位数");
scanf("%d%d", &x, &y);
int ret = parr[input](x, y);//调用指针
printf("%d", ret);
}
else if (input == 0)
printf("退出\n");
else
printf("错误\n");

} while (input);
return 0;
}


回调函数

int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}

void mune()
{
printf("**********1add 2,sub*********\n");
printf("**********3mul 4,div*********\n");
printf("*********** 0exit *************\n");
}

void calc(int(*pf)(int, int))//调用函数地址(回调函数)
{
int x;
int y;
printf("请输入");
scanf("%d%d", &x, &y);
printf("%d", pf(x, y));
}

int main()
{
int input = 0;
int x;
int y;
do
{
mune();
printf("xuanze\n");
scanf("%d", &input);
switch (input)
{
case 1:
calc(add);//add函数地址
break;
case 2:
calc(sub);
break;
case 3:
calc(mul);
break;
case 4:
calc(div);
break;
default:
printf("输入错误");
break;
}

} while (input);
return 0;
}



指向函数数组的指针(理解)

int main()
{
int arr[10];
int(*p)[10] = &arr;//数组的地址
int (*pf)(int, int);//函数指针
int(*pfarr[4])(int, int);//函数指针的数组
int(*( * ppfarr) [4])(int, int) = &pfarr;//指向数组函数的指针
//函数指针的类型int (*)(int ,int)
}


qsort(冒泡排序)

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
typedef struct stu
{
char name[20];
int age;
};
int cmp_int(const void* e1,const void* e2)//空指针可以避免数据类型的问题。可以接受任意地址,void*不能通过解应用运算。
{
return (int)(*(int*)e1 - *(int*)e2);//可以改变类型值
}
int cmp_stu_name(const void* e1, const void* e2)//空指针可以避免数据类型的问题。可以接受任意地址,void*不能通过解应用运算。

{//名字比较就是比较字符串。不能用符号来表示//比较阿斯克码表(首个字母)
return strcmp(((stu*)e1)->name, ((stu*)e2)->name);
}
int main()
{
float arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_stu_name);//1排序的数组,2个数3,字符大小,运行函数//可以换函数
stu s[2] = { {"zhangsan",18},{"lisi",20} };
printf("%s ", s->name);
retuen 0;
}

qsort实现

void swap(char* buf1, char*buf2, int width)//交换字节
{
int i;
for (i = 0; i < width; i++)//字节个数
{
char tem = *buf1;
*buf1 = *buf2;
*buf2 = tem;
buf1++;
buf2++;
}
}
void sqotr(void* base, int sz, int width, int(*cmp)(void* e1, void* e2))
{
int i;
for (i = 0; i < sz; i++)//趟数
{
int j;
for (j = 0; j < sz - 1 - j; j++)//冒泡排序
{
if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0)
{
swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
}
}
}
}

数组大小

进阶指针2_函数指针

进阶指针2_函数指针_02

标签:return,进阶,int,void,width,printf,input,指针
From: https://blog.51cto.com/u_15770447/5786129

相关文章

  • 【C语言进阶】二.指针(上)
    前言:指针的主题,我们在【C语言有这个就够了】学习中已经接触过了,我们知道了指针的概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间2.指针的大小是固定的4/8个字......
  • SQL进阶篇之函数
    SQL拥有很多可用于计数和计算的内建函数函数的语法SELECTfunction(列)FROM表函数类型Aggregate函数:操作面向一系列的值,并返回一个单一的值(注:如果在SELECT语句......
  • TypeScript 复习进阶三部曲 (1) – 把 TypeScript 当强类型语言使用
    前言本来是想照着TypeScript官网handbook写教程的.但真的没那个mood.还是用我自己的方式写教程(其实是复习和进阶笔记)吧 学习TypeScript的三个阶段(三部......
  • Golang:3.5、Golang 指针
    3.5、Golang指针指针取地址:&取值:*指针地址:每一个变量都有一个地址,地址代表变量在内存中的位置Go语言中的值类型(int、float、bool、string、array、struct)对应的指......
  • c语言—数据存储进阶篇—笔记
    数据存储还是比较麻烦的,因为要数数和做加减运算(原码、反码、补码),但因为牵扯到内存硬件,所以比较容易理解。1.数据类型char//字符数据类型short//短整型int//整形long//长......
  • C++ 核心 3. 函数进阶
    3函数进阶3.1默认参数语法:返回值类型函数名(参数=默认值){}e:intfunc(inta,intb=10,intc=100){returna+b+c;}注意事项:1.默认参数应该在非默认参数......
  • 实验3 数组、指针与现代C++标准库
    一.实验结论:1.实验任务5:Info.hpp:#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classInfo{public:Info(){}Info(st......
  • transform 进阶
    1、ApplyMethod这个只能执行mobject的方法,例如:s=Square()sp(ApplyMethod(s.scale,3)) 2、ApplyPointwiseFunctions=Squa......
  • 实验3 数组、指针与现代c++标准库
    1.实验任务1程序源码task1_1#include<iostream>usingstd::cout;usingstd::endl;classA{public:A(intx0,inty0):x{x0},y{y0}{}voidshow......
  • 大厂进阶篇Docker与微服务实战-技术点从入门到高级全面覆盖
     说明随便创建个SpringBoot项目,写个Controller方法,然后用maven配置打包项目成xx.jar,调用接口如下面图片,当做案例进行测试。二、高级篇(大厂进阶)3.Docker微服务实......