c语言技术验证:带参数及返回值的函数指针数组运用 任务类型数组的长度等

  •  函数指针数组运用
typedef void(*pMethod)(); //函数指针的样式   返回值,参数等
//函数数组
pMethod methods[] = { GetDeviceInfoCallBack,GetDeviceInfoCallBack,GetDeviceInfoCallBack };

int methodsSize=sizeof(methods)/sizeof(methods[0]);//函数指针数组的长度

#define SIZE(array) (sizeof(array)/sizeof(array[0])) //任务类型数组的长度

 

  • 带参数及返回值的函数指针数组运用

# include <stdio.h>
//函数定义,可以多个
int UpdateValue2(float value)
{
	printf("UpdateValue2:%f\n",value);
	return 100;
}
int main()
{
	//函数指针数组定义
	int(*dbcl[])( float value)={UpdateValue2};
	//函数指针数组调用
	printf("main:%d\n",(*dbcl[0])(15)); 
	return 0;
}

//UpdateValue2:15.000000
//main:100
//Press any key to continue

 

  •  验证4字节,低位在前,转int

# include <stdio.h>

int main()
{

		int i=0;
		int Baud[]={115200};
		unsigned char sendBuff[6]={0};
		//验证4字节,低位在前,转int
		sendBuff[2]=Baud[i]%256;
		sendBuff[3]=(((unsigned short)Baud[i])&0xff00)>>8;
		sendBuff[4]=(((unsigned int)Baud[i])&0x00ff0000)>>16;
		sendBuff[5]=(((unsigned int)Baud[i])&0xff000000)>>24;
		printf("%02X%02X%02X%02X\n",sendBuff[5],sendBuff[4],sendBuff[3],sendBuff[2]);
    return 0;
}


 

  • 指向数组的指针

# include <stdio.h>
int main()
{
	//仅通过指针是无法获取它指向的数组的大小的。我把长度也单独放在一个数组里
	//通过指针调用数组并计算长度,为什么长度不对?在32位系统中指针的长度始终是4,它是用来存放地址的。数组的长度是根据它中间的 元素个数*类型长度 得到的。sizeof 是在编译阶段确定的。指针只给出了两种信息:所指向数据的类型和地址 。而根据两者你是无法判断该数据的地址范围的。
	const unsigned char vType0[]={8,1,1}; //参数类型:字符1,整型2,浮点4等
	const unsigned char vType1[]={5,1,1,1,1}; //参数类型:字符1,整型2,浮点4等
	const unsigned char vType2[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //参数类型:字符1,整型2,浮点4等
	const unsigned char vType3[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //参数类型:字符1,整型2,浮点4等
	const unsigned char *vType[]={vType0,vType1,vType2,vType3};
	const unsigned char *v=vType[1];
	unsigned int vTypeLength[]={sizeof(vType0),sizeof(vType1),sizeof(vType2),sizeof(vType3)};
	printf("----%d,%d,%d,%d,%d,%d,%d\n",v[0],sizeof(v),sizeof(vType),sizeof(vType0),vType[0],vType0,vTypeLength[1]);
	return 0;
}

//----5,4,16,3,1638212,1638212,5
//Press any key to continue
  • 截取字符串后转成字节

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main(int argc,char * argv[])
{
		unsigned char i;
		char dest[5] = {0};
		char src[] = "1234";
		memcpy(dest, src+1, 2);
		i	=(unsigned char)atoi(dest);
		printf("%d",i);
    return 0;
}
  • 三维数组 测试 

# include <stdio.h>

int main()
{
	//三维数组 测试
	char IDS[20][2][20]={
		{"123","ddd"},
		{"456","7777"},
	};
	printf("%s,%s",IDS[0][0],IDS[1][1]);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小黄人软件

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

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

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

打赏作者

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

抵扣说明:

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

余额充值