C 如何打印由空指针数组指向的值
我定义了一个结构来保存任何类型的一组值,这就是void**数据的原因。如果有人能帮助我通过一组空指针打印值指针,我将不胜感激。 结构如下C 如何打印由空指针数组指向的值,c,arrays,pointers,void,C,Arrays,Pointers,Void,我定义了一个结构来保存任何类型的一组值,这就是void**数据的原因。如果有人能帮助我通过一组空指针打印值指针,我将不胜感激。 结构如下 typedef struct item{ void **data;//array of void pointer to store names of the group-members int count;//number of members in the group struct item *next; //pointer to the
typedef struct item{
void **data;//array of void pointer to store names of the group-members
int count;//number of members in the group
struct item *next; //pointer to the next group in the pool queue
} group;
现在,假设创建了一个组,如下所示:
group *gp = (group*) malloc(sizeof(group));
void *a[2];
a[0] = (void*) "John";
a[1] = (void*) "Jim";
gp->data = a;
gp->count = 2;
在某些时候,可能在另一个函数中,如果需要打印组节点的值数组,我应该编写什么代码?下面是这样一个函数:
void print_group_node(group *gp)
{
//I have the check for vp==NULL here
void **vp = gp->data;
int c = gp->count;
int i;
for(i = 0; i < c; i++)
printf();//what should I write here
//other codes here
}
void print\u group\u节点(组*gp)
{
//我在这里检查vp==NULL
作废**vp=gp->数据;
INTC=gp->count;
int i;
对于(i=0;i
谢谢。如果数据可以是任何类型的变量。在结构
组
中,您可能还需要一个类似于下面的数据类型
的字段来说明数据
的类型
typedef struct item{
....
int data_type; // 0: int, 1: char * (string), ...
} group;
并根据需要使用适当的printf()
void print_group_node(group *gp)
{
//I have the check for vp==NULL here
void **vp = gp->data;
int c = gp->count;
int i;
for(i = 0; i < c; i++)
switch (gp->data_type) {
case 0:
printf("%d \n", (int*)vp[i])
break;
case 1:
printf("%s \n", (char *)vp[i])
break;
Default:
printf("Unknown type");
break;
}
}
不能以常规方式打印任意类型的值。您可以以某种方式存储类型信息并自定义
print
函数,以便它支持所有可能的类型。我假设此代码段位于函数main中
group *gp = (group*) malloc(sizeof(group));
void *a[2];
a[0] = (void*) "John";
a[1] = (void*) "Jim";
gp->data = a;
gp->count = 2;
当本地数组void*a[2]时,您将访问动态分配结构的数据成员代码>处于活动状态。
否则,最好分配gp->data指向的额外内存。比如说
group *gp = (group*) malloc(sizeof(group));
gp->data = malloc( 2 * sizeof( void * ) );
gp->data[0] = "John";
gp->data[1] = "Jim";
gp->count = 2;
在这种情况下,要在其他函数中输出这些数据,您需要知道指针gp->data的实际类型,以便使用适当的强制转换
因此,如果您确切地知道数据的实际类型是char**
,那么您可以在其他函数中编写
for(i = 0; i < c; i++)
printf( "%s\n", ( char * ) gp->data[i] );
(i=0;i
printf(“%s\n”,(char*)gp->data[i]);
否则,您需要枚举将与结构一起使用的所有类型,并添加相应的数据成员,用于确定指针的实际类型。
printf(“%s\n”,(char*)vp[i])
如果一个组的数据类型不同于char*
,会发生什么情况?那么您需要在组中再添加一个变量,告诉指针有什么类型的数据。是的,这就是OP所要求的。
printf("%s \n", (char *)vp[i])