结构体数组声明易懂例子_函数指针声明_结构体数组内部出现方括号是什么_小白拼音C语言

示例代码:

#include"stdio.h"
#include"stdint.h"

typedef void  (*hanshuzhizhen)  (void);

struct jiegouti//这是个结构体 
{
	int8_t  paraone;//第一个参数 
	uint8_t  paratwo;//第二个参数
	uint16_t parathree;//第三个参数
	hanshuzhizhen func;//函数指针、结构体内部函数 
};


void jiegoutineibuhanshu(void)
{
    printf("结构体内部函数被调用了/n");
}

const struct jiegouti jiegoutishuzu[2]=//这个就是结构体数组,最多里面两个结构体 
{
		[1] ={
				1,
				2,
				3,
				(hanshuzhizhen)jiegoutineibuhanshu
				},
};

int main()
{
			uint8_t paraone;
			uint16_t paratwo;
			paraone = jiegoutishuzu[1].paraone;
			paratwo = jiegoutishuzu[1].paratwo;
			printf("paraone = %d\n,paratwo = %d\n",paraone,paratwo);
			jiegoutishuzu[1].func();

}

1.结构体数组声明_结构体数组内部出现方括号是什么:

这里的结构体叫做jiegouti,里面含3个元素,paraone,paratwo,parathree,结构体数组就是一个数组,每一个数组元素都是一个结构体,每一个数组元素里面都有三个结构体元素,我们这里的结构体数组叫jiegoutishuzu,里面有2个结构体,分别是jiegoutishuzu[0]、jiegoutishuzu[1],我们初始化jiegoutishuzu[1]的结构体元素是1 2 3 。

这里的[1]就是说jiegoutishuzu[1]赋值,如果没有这个[1]那就是按照[0],[1]的顺序初始化赋值。

struct jiegouti//这是个结构体 
{
	int8_t  paraone;//第一个参数 
	uint8_t  paratwo;//第二个参数
	uint16_t parathree;//第三个参数
};

const struct jiegouti jiegoutishuzu[2]=//这个就是结构体数组,最多里面两个结构体 
{
		[1] ={
				1,
				2,
				3,
				},
};

2.函数指针声明

函数指针就是指向函数的指针,函数名就是函数指针,声明一个函数指针之后,就可以让他指向一些同类函数:

这里的jiegouti里面增加了一个类型是hanshuzhizhen类型的函数指针,这类函数指针,专门指向输入输出都是void的函数,这里指向的函数名叫func:

typedef void  (*hanshuzhizhen)  (void);

hanshuzhizhen func;

这种声明就相当于 void func(void):

在实例化结构体的时候,或者说给结构体数组元素结构体赋初值的时候,就需要在相应位置放一个输入输出都是void的函数:

(hanshuzhizhen)jiegoutineibuhanshu

这个函数就是结构体内部数组——jiegoutineibushuzu,功能就是输出一个调用成功声明。

typedef void  (*hanshuzhizhen)  (void);

struct jiegouti//这是个结构体 
{
	int8_t  paraone;//第一个参数 
	uint8_t  paratwo;//第二个参数
	uint16_t parathree;//第三个参数
	hanshuzhizhen func;//函数指针、结构体内部函数 
};


void jiegoutineibuhanshu(void)
{
    printf("结构体内部函数被调用了/n");
}

const struct jiegouti jiegoutishuzu[2]=//这个就是结构体数组,最多里面两个结构体 
{
		[1] ={
				1,
				2,
				3,
				(hanshuzhizhen)jiegoutineibuhanshu
				},
};

3.示例代码显示结果


如果在结构体数组实例化中去掉[1],main中调用就会溢出(仅对于函数),因为实例化的相当于[0],1那部分内存没初始化(所以值是0):

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章