首页 > 其他分享 >C进阶(指针)

C进阶(指针)

时间:2023-09-05 21:31:52浏览次数:49  
标签:arr 进阶 int void test fun 函数指针 指针

一维数组传参的几种形式(5种)
void test(int arr[])//
{}
void test(int arr[10])//
{}
void test(int *arr)//
{}
void test2(int *arr[20])//
{}
void test2(int **arr)//
{}

int main()
{
 int arr[10] = {0};
 int *arr2[20] = {0};
 test(arr);
 test2(arr2);
}
二维数组传参的几种形式
  1. 二维数组的传参,函数形参的设计只能省略一个[]的数字。即必须知道一行有多少元素。
void test(int arr[3][5]);
void test(int arr[][5]);
void test(int (*arr)[5])

int main()
{
	int arr[3][5]={0};
  test(arr);
}
函数指针
  1. 函数名就是函数的入口地址 , 两者打印结果一致
void fun()
{}
void main()
{
	printf("%p\n",fun);    //  输出结果一致
  printf("%p\n",&fun);
}
  1. 定义函数指针调用形式
void fun(int a, char *s)
{}
void main()
{
	void(*pfun)(int, char*)=&fun;	  //  标准写法
  (*pfun)();
	void(*pfun)(int a, char *s)=fun;    //  简化写法
  pfun();
}
指向函数指针数组的指针
  1. 是一个指针。指针指向一个数组,数组里的元素都是函数指针
int(*(*a)[5])(int)
void test(const char* str){}
void main()  
{
//  指向函数的指针
 void (*pfun)(const char*) = test;
 //  指向函数的指针数组
 void (*pfunArr[5])(const char* str);
 //  指向函数指针数组的指针
 void (*(*ppfunArr[5])(const char*) = &pfunArr;
}
回调函数

通过函数指针调用的函数。把函数的指针(地址)作为参数传递给另一个参数,当这个指针被用来调用其所指向的函数时,称为回调函数。

int Max(int a, int b){return a>b?a:b}
int Find(int a, int b, int(*pfun)(int, int)){return pfun(a,b);}
void main() 
{
	int a=10; int b =20;
  //int max_value = Max(a,b);
  int value = Find(a,b,Max);  //  回调函数
}
知识积累:
  1. 函数强转
(*(void(*)())0)()     //   将0强制转换为函数指针,再进行调用
  1. typedef使用
int * (* (*fun)(int *))[10]
typedef int* (*Ar_t)[10];  
Ar* (*fun)(int *); //简化形式 
// 指向函数返回值为数组指针的函数指针,其中函数指针的参数为整形指针
// 加了typedef  是定义一个类型  不加直接定义一个数组
void main()
{
	Ar a;
}
  1. 程序分析
程序简写   
void (*signal(int, void(*)(int)))(int)   //  简写
typedef void(*PFun_t)(int)
PFun_t signal(int, PFun_t PF)

转移表
int Mod(int a, int b){}; int Mut(int a, int b){};
int(*fun_table[])(int, int) = {NULL, Mod, Mut};
int select, a, b; scanf("%d %d %d", &select,&a,&b);
int result = fun_table[select](a, b);
  1. 快排函数的使用(qosrt)

 整形数据的排序,字符串排序, 结构体排序(根据结构体中的某一个元素)

#include<stdio.h>
#include<stdlib.h>
qosrt(void *base, size_t num, size_t width, 
int (*compare)(const void *elm1, const *elm2))

使用冒泡排序模拟快排

标签:arr,进阶,int,void,test,fun,函数指针,指针
From: https://blog.51cto.com/u_16192117/7380033

相关文章

  • 指针练习(1)
    1.intmain(){ inta[3][2]={(0,1),(2,3),(4,5)}; int*p; p=a[0]; printf("%d",p[0]); return0;}解析:a是一个3行2列的二维数组,对他进行初始化时大括号里面是逗号表达式,根据逗号表达式可以得到a数组中元素为1,3,5,0,0。p里面存放的是a[0]的地址,a[0]表示第一行的地址,表......
  • 指针与数组
    【1】指针与一维数组定义:eg1:intx[3]={4,5,6};int*p;       eg2:intx=12;  p=&x;                       int*p=x; eg3:表示:地址[]*(地址)序号0 12内容4......
  • 句柄和指针的区别
    句柄和指针是计算机科学中常用的两种数据类型。句柄(Handle)是一个在程序中用来引用对象或资源的标识符。它是一个代表对象的唯一标识符,但本身不直接指向对象的内存地址。句柄可以看作是一种间接引用,通过句柄可以访问和操作对象或资源。句柄一般由系统分配和管理,对应于对象或资源......
  • 智能指针
    智能指针就是帮我们C++程序员管理动态分配(程序员手动删除,手动释放,也就是说智能指针是帮我们操作堆区内存的)的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!unique_ptr创建,初始化1unique_ptr<int>up;2up=make_unique<int>(100); ......
  • C语言-指针
    目录指针行指针多级指针void指针const修饰符指针前置概述:在计算机内存中最小的操作单元是字节Byte(不是位bit)。每一个字节单元,都有一个编号,称为地址。指针定义:专门用来存放地址的变量,称为指针变量,通称指针。格式:<存储类型><数据类型>*<指针变量名>inta=10;int*p......
  • 简单理解c语言指针
    &p(取地址)P*p(间接寻址) 假设p指向整数型变量a,那么可以理解为p等同于a的地址。*是间接寻址运算符,对p进行操作,找到p这个地址中所对应(放的)东西。也就是说,*p就是a。做个比喻,将*理解成取平方,而操作数p是地址,那么p的平方就是a,如2的平方就是4。(不过这里其实p不像是常量而更像变量x,......
  • 《C和指针》学习笔记
    C和指针学习笔记前置条件1.1配置环境下载vscode安装编译器:这里以MinGw-w64为例。下载MinGw-w64的安装包并解压。添加到系统环境编辑tasks.json(该文件负责项目的编译,如果需要同时编译多个文件,需要对该文件进行如下注释内的修改):{"tasks":[{......
  • C++智能指针
    一、常规指针的缺点当一个常规指针离开了作用域时,只有该指针变量本身占用的内存空间(4/8字节)会被释放,而它指向的内存空间不会自动释放,当free\delete\delete[]语句忘记执行或者无法执行,形成内存泄漏二、智能指针的优点智能指针是一个封装了常规指针的类类型对象,并且重载了......
  • 手撕数据结构与算法——树(三指针描述一棵树)
    ......
  • 飒!!!指针跃动 正式牵手 首汽约车 了!
    今天,北京指针跃动科技有限公司与首约科技(北京)有限公司达成战略合作,也意味着“首汽约车”代驾服务业务将在全国启动,“指针跃动”作为唯一指定代驾服务商倍感荣耀与责任;“首汽约车”作为互联网出行行业的先行者之一,至目前已经服务约1.5亿用户,服务于全国228座城市,拥有50万辆......