動態結構體的使用

動態結構體的使用

結構體在編程開發中,是經常被使用的數據類型。在實際的開發中,有些結構體在聲明的時候總是需要聲明多種變量,但實際使用時並不總是需要全部使用

但是結構體的聲明是靜態的,即使結構體爲空,它也仍要佔據大量的空間,造成資源浪費。如果是發送數據且發送數據頻率過高,就會佔用大量帶寬,影響系統的性能

問題示例

例如:一個客戶端和服務器需要使用TCP進行數據交互,客戶端向服務器發送點雲數據;正常情況下,客戶端只會發送一小部分的點雲數據(少量的點的位置發生變化),只有在極少的情況下,才需要發送全部的數據(所有點的位置信息都更新)
但是在項目開發中,存放點雲數據的結構體的大小是能夠存放所有點數據的,這樣就會造成每次發送給服務器的數據包的大小都是最大尺寸的,造成網絡帶寬佔用極大

參考鏈接:https://blog.csdn.net/zhanshen112/article/details/80791622

動態結構體實例:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(Data)

typedef struct
{
	int val;
}test;

typedef struct
{
    int num;
	test t[];
} Data;
 
int main()
{
    int len, i;
    Data *pData;
    printf("請輸入test結構體的個數:\n");
    scanf("%d", &len);
    pData = (Data*)malloc(LEN+sizeof(test)*(len-1));
	
	printf("請輸入Data結構體的值:");
	scanf("%d",&(pData->num));
	for (i = 0; i<len; i++)
    {   
		printf("請輸入pData->t[%d].val 的值\n",i);
        scanf("%d", &pData->t[i].val);
    }

	printf("The Data.num is %d\n",pData->num);
		for (i = 0; i<len; i++)
    {   
        printf("The pData[%d].val is %d\n",i,pData->t[i].val);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章