動態結構體的使用
結構體在編程開發中,是經常被使用的數據類型。在實際的開發中,有些結構體在聲明的時候總是需要聲明多種變量,但實際使用時並不總是需要全部使用
但是結構體的聲明是靜態的,即使結構體爲空,它也仍要佔據大量的空間,造成資源浪費。如果是發送數據且發送數據頻率過高,就會佔用大量帶寬,影響系統的性能
問題示例
例如:一個客戶端和服務器需要使用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;
}