結構體數組聲明易懂例子_函數指針聲明_結構體數組內部出現方括號是什麼_小白拼音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):

 

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