在C中有没有一种方法可以指向一个指针数组,每个指针都指向不同的数据类型?

在C中有没有一种方法可以指向一个指针数组,每个指针都指向不同的数据类型?,c,pointers,void-pointers,C,Pointers,Void Pointers,我正在尝试用嵌入式C创建一个自动模板,它有一个固定的平面文本格式,中间穿插着我需要从数组中提取的可变参数。所以我在参数出现的地方放置了一个保持器。一些参数是字符串,而另一些是整数值或浮点值 我已经插入扩展ASCII值作为占位符,然后减去0x80,以根据占位符的出现点提取索引。但我还没有办法指向不同的源表。根据定义,数组是相似数据类型的集合。因此,没有一种直接的方法可以让指针数组指向不同的数据类型 实现这一点的方法之一是在访问/取消引用元素时,使用预期的数据类型对数组元素进行类型转换 要在访问元素

我正在尝试用嵌入式C创建一个自动模板,它有一个固定的平面文本格式,中间穿插着我需要从数组中提取的可变参数。所以我在参数出现的地方放置了一个保持器。一些参数是字符串,而另一些是整数值或浮点值


我已经插入扩展ASCII值作为占位符,然后减去0x80,以根据占位符的出现点提取索引。但我还没有办法指向不同的源表。

根据定义,数组是相似数据类型的集合。因此,没有一种直接的方法可以让指针数组指向不同的数据类型

实现这一点的方法之一是在访问/取消引用元素时,使用预期的数据类型对数组元素进行类型转换

要在访问元素时了解正确的
类型
,需要在定义元素时存储类型

可能的解决方案如下所示:

typedef struct
{
   int type; //0 - enumDay, 1 - Struct C etc
   void* data;
}mydata_t;

mydata_t myarray[10];
分配:

myarray[0].type = 2; //Lets assume 2 for string
myarray[0].data = "My String";
 if( myarray[0].type == 2) // is it a string?
 {
    printf("This is the string :%s \n",(char*)myarray[0].Data);
 }
使用:

myarray[0].type = 2; //Lets assume 2 for string
myarray[0].data = "My String";
 if( myarray[0].type == 2) // is it a string?
 {
    printf("This is the string :%s \n",(char*)myarray[0].Data);
 }

根据定义,数组是相似数据类型的集合。因此,没有一种直接的方法可以让指针数组指向不同的数据类型

实现这一点的方法之一是在访问/取消引用元素时,使用预期的数据类型对数组元素进行类型转换

要在访问元素时了解正确的
类型
,需要在定义元素时存储类型

可能的解决方案如下所示:

typedef struct
{
   int type; //0 - enumDay, 1 - Struct C etc
   void* data;
}mydata_t;

mydata_t myarray[10];
分配:

myarray[0].type = 2; //Lets assume 2 for string
myarray[0].data = "My String";
 if( myarray[0].type == 2) // is it a string?
 {
    printf("This is the string :%s \n",(char*)myarray[0].Data);
 }
使用:

myarray[0].type = 2; //Lets assume 2 for string
myarray[0].data = "My String";
 if( myarray[0].type == 2) // is it a string?
 {
    printf("This is the string :%s \n",(char*)myarray[0].Data);
 }

在重读你的问题之后——在任何人回答任何问题之前,你必须更加清楚。甚至不清楚你在问什么-你的内容似乎与你的标题不一致。你可以使用struct,或者如果需要struct的数组吗?我已经插入了扩展ASCII值作为占位符。呸。。。这真是一个勇敢的方法。但它也会限制你的代码只能是ASCII字符串,不能移植到任何非英语语言,也不可能使用任何排版unicode字符,如左引号和右引号:
U+201d,
U+201c,
U+2019,
U+2018,它们现在在HTML页面中很常见。请仔细考虑一下……此外,使用像
{…}
这样的真正占位符可以允许在模板本身中传递类型或格式信息。请参见此示例:它存储“通用数据”在链表中,但如果你想要数组,原理是一样的。第二种使用并集的解决方案是我更喜欢的。指向结构并集的指针数组?在重新阅读你的问题后,你必须更加清楚,然后任何人才能回答任何问题。甚至不清楚你在问什么-你的内容似乎不清楚列好你的标题。你可以使用结构,或者如果需要的话,可以使用结构数组吗?我已经插入了扩展的ASCII值作为占位符。呸…这真是一个勇敢的方法。但它也会限制你一生只编码ASCII字符串,不能移植到任何非英语语言,也不可能使用任何类似unicode的排版字符左引号和右引号:
U+201d,
U+201c,
U+2019,
U+2018,这在HTML页面中很常见。请仔细考虑一下……此外,使用真正的占位符,如
{…}
可以允许在模板本身中传递类型或格式信息。请参见此示例:它将“通用数据”存储在一个链表中,但如果需要数组,则原理相同。使用并集的第二种解决方案是我更喜欢的解决方案。指向结构并集的指针数组?引用:“实现这一目标的唯一方法是……”嗯,还有其他方法,例如使用工会。引用:“实现这一目标的唯一方法是……”嗯,还有其他方法,例如使用工会。