学习笔记(76):C语言入门到精通-类型转换-2

本文详细介绍了C语言中指针类型之间的转换方法,包括char*到int*的转换,以及函数指针的使用。通过实例展示了如何定义和使用函数指针,如MathSum、MathAdd和MathAgv,并在main函数中进行了演示。
摘要由CSDN通过智能技术生成

立即学习:https://edu.csdn.net/course/play/10534/380031?utm_source=blogtoedu

学习目标
掌握指针类型之间的转换。
掌握函数指针之间的转换。

指针类型之间的转换
函数指针之间的转换
#include <stdio.h>
#include <string.h>


typedef int (*MathSum)(int[], int);
typedef int (*MathAdd)(int, int);
typedef int (*MathAgv)(int[], int);


int sum(int scores[], int len) {
	int sum = 0;
	int i = 0;


	for (i = 0; i < len; i++) {
		sum += scores[i];
	}


	return sum;
}


int add(int a, int b) {
	return a + b;
}


int agv(int scores[], int len) {
	int agv = 0;
	int i = 0;


	for (i = 0; i < len; i++) {
		agv += scores[i];
	}


	return agv / len;
}


typedef struct {
	MathSum sum;
	MathAdd add;
	MathAgv agv;
} MathTool;


void fun_point_test() {
	MathTool math = { sum, add, agv };
	int a[5] = { 1,2,3,4,5 };


	//memset(&math, 0, sizeof(math));


	printf("math.sum = %p, math.add = %p, math.agv = %p\n", math.sum, math.add, math.agv);


	//math.sum = sum;
	//math.add = add;
	//math.agv = agv;
	printf("sum(1 2 3 4 5) = %d\n", math.sum(a, sizeof(a)/sizeof(int)));
	printf("add(1, 2) = %d\n", math.add(1, 2));
	printf("agv(1 2 3 4 5) = %d\n", math.agv(a, sizeof(a) / sizeof(int)));
}


int main() {
	char* pc = NULL;
	int* pi = NULL;
	int* pc2i = NULL;
	char c = 'A';
	int d = 10;




	// 函数指针
	fun_point_test();


	pc = &c;
	printf("sizeof(pc) = %u\n", sizeof(pc));


	pi = &d;
	printf("sizeof(pi) = %u\n", sizeof(pi));


	// 指针类型转换
	printf("*pc = %c, *pi = %d\n", *pc, *pi);
	// char* -> int*, 强制类型转换
	pc2i = (int*)pc;
	printf("*pc2i = %c, *pc = %c\n", *pc2i, *pc);


	// int* -> char*, 强制类型转换
	d = 1000;  // 1 byte = 255
	pc = (char*)pi;
	printf("*pc = %d, *pi = %d\n", *pc, *pi);


	// double* -> int*
	// 由大的类型转换到小的类型时,数据可能会丢失。


	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道知极限编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值