#include<stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
uint8_t g_num0 = 10;
uint8_t g_num1 = 11;
uint8_t g_num2 = 12;
uint8_t g_num3 = 13;
uint8_t g_num4 = 14;
#define PROPERTY_NUM 5
//数据元素都是uint8_t类型的变量
uint8_t *g_valueTable[PROPERTY_NUM] = {
&g_num0,&g_num1,&g_num2,&g_num3,&g_num4
};
uint8_t g_saveTable[PROPERTY_NUM]={0};
void init_diff_value()
{
for(int i=0;i<PROPERTY_NUM;i++)
{
g_saveTable[i]=*g_valueTable[i];
}
}
//处理发生变化的对应属性
uint8_t process_diff_value(int start_index)
{
if(start_index>=PROPERTY_NUM)
{
return 0xFF;
}
for(int i=start_index;i<PROPERTY_NUM;i++)
{
if(g_saveTable[i]!=*g_valueTable[i])
{
g_saveTable[i]=*g_valueTable[i];
//todo diffrent value process...
printf("value[%d] is changed!\n",i);
return i;
}
}
}
void main()
{
init_diff_value();
for(int i=0;i<PROPERTY_NUM;i++)
{
printf("[%d] property value=%d.\n",i,*g_valueTable[i]);
//out: 10,11,12,13,14
}
printf("raw g_num0=%d,g_num3=%d.\n",g_num0,g_num3); //out: 10,13
*g_valueTable[0] = 45; //num0
*g_valueTable[2] = 67; //num2
*g_valueTable[3] = 89; //num3
printf("new g_num0=%d,g_num3=%d.\n",g_num0,g_num3);//out: 67,89
uint8_t ret = 0;
do
{
ret = process_diff_value(ret);
if(ret==0xFF)
break;
ret++;
}while(1);
}
【C语言】变量表指针数组
于 2023-08-07 14:39:09 首次发布
本文介绍了一个C程序,使用typedef定义数据类型,处理数据结构中的uint8_t类型的变量。函数init_diff_value初始化保存表,process_diff_value检测并处理属性值变化。在main函数中,展示了如何更新属性值并触发差异处理过程。
2073

被折叠的 条评论
为什么被折叠?



