零碎的C语言基础知识第二部分(指针)

指针

指针类型

  • 指针类型决定了指针进行解引用操作的时候,能够访问空间的大小
int* p; *p可以访问4个字节
char* p; *p可以访问1个字节
double* p; \*p可以访问8个字节
  • 此可访问空间大小取决于int,char,double本身所占空间的大小

指针加减整数

  • 指针加减整数n会将地址偏移指针类型可访问字节数*n个字节
int *p
p = 0x11111111
p+2==0x11111119//2*4=8;int\* 可以访问4个字节;对应的int所占4字节

指针与数组

  • 数组名是数组首元素地址
  • &arr- &数组名-数组名部署首元素的地址-数组名表示整个数组-&数组名 取出的是整个数组的地址
  • sizeof(arr) - sizeof(数组名) - 数组名表示的整个数组-sizeof(数组名)计算的是整个数组的大小
int arr[5]//arr是一个5个元素的整形数组
int *parr1{10}//parr1是一个数组,数组有10个元素,每个元素的类型是int*,parr1是指针数组
int (*parr2)[2]//parr2是一个指针,该指针指向了一个数组,数组有10个元素,每个元素的类型是int-parr2是数组指针
int (*parr3[10])[5]//parr3是一个数组,该数组有10个元素,每个元素是一个数组指针,该数组指针指向的数组有5个元素,每个元素是int

函数指针

  • 函数指针是指向函数的指针,它可以存储函数的地址,允许在程序运行时动态地调用函数。在C和C++等编程语言中,函数指针可以用来实现回调函数、动态函数调用等功能。通过函数指针,可以将函数作为参数传递给其他函数,也可以在运行时根据需要改变调用的函数。
#include <stdio.h>
// 定义一个函数
void sayHello() {
    printf("Hello, World!\n");
}

int main() {
    // 声明一个函数指针,指向无返回值、无参数的函数
    void (*funcPtr)();
    // 将函数地址赋给函数指针
    funcPtr = sayHello;
    // 通过函数指针调用函数
    funcPtr();
    return 0;
}

在这个示例中,funcPtr 是一个指向无返回值、无参数的函数的指针。通过将 sayHello 函数的地址赋给 funcPtr,我们可以通过 funcPtr() 调用 sayHello 函数

  • 函数指针数组的应用(计算器)
#include<stdio.h>

void menu()
{
	printf("************************\n");
	printf("**1.add\t2.sub**\n");
	printf("**3.mul\t4.div**\n");
	printt("**\t0.exit\t**");
}
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;
}

int main()
{
	int input = 0;
	int x=0;
	int y=0;
	int (*pfArr[5])(int,int)={0,Add,Sub,Mul,Div};//转移表
	do
	{
		menu();
		printf("请选择:");
		scanf("%d",&input);
		if(input>=1&&input<=4)
		{
			printf("请输入两个操作数:");
			scanf("%d%d",&x,&y);
			int ret = prArr[input](x,y);
			printf("%d\n",ret);
		}
		else if(input==0)
			printf("退出");
		else
			printf("err");
	}
}

在程序的主循环中,根据用户输入的选择,通过调用相应的函数来执行加法、减法、乘法或除法操作。这样通过函数指针数组,可以实现根据用户选择动态调用不同的函数,从而实现了代码的灵活性和可扩展性。

回调函数

  • 回调函数是指将一个函数作为参数传递给另一个函数,并在该函数内部被调用。这种机制允许您在运行时动态地指定要执行的特定代码。回调函数通常用于事件处理、异步任务和通用接口设计
#include <stdio.h>
// 回调函数的原型
typedef void (*CallbackFunction)(int);
// 接受回调函数作为参数的函数
void performOperation(int data, CallbackFunction callback) 
{
    printf("Performing operation with data: %d\n", data);
    // 调用回调函数
    callback(data);
}
// 回调函数示例
void callbackFunction(int result)
{
    printf("Callback function called with result: %d\n", result);
}
int main() 
{
    int data = 10;
    // 调用 performOperation,并传递回调函数
    performOperation(data, callbackFunction);
    return 0;
}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值