hack3er 发表于 2013-3-29 09:34:11

c语言中,如何实现指向任意数据类型的指针?

假如一个指针*p,要指向一堆数据
int a=1;
float b=1.2345;
short c=1234;
long d=1234567;
......................
......................
......................
这堆数据里有int,float,long等任意的数据类型。
要怎么才能让指针指向任意的数据类型呢?

lusson 发表于 2013-3-29 09:47:54

void *p???

mengfc 发表于 2013-3-29 09:51:36

楼主,C语言应该系统的学一下,特别是指针部分。C语言的精华就在指针。
指向任意类型的指针类型是void * p,具体使用时再转换为具体的类型。
void * p = &ch;
char * pch = (char *)p;

墨非 发表于 2013-3-29 09:51:47

同楼上 void *p
p = &a;
使用的时候记得指定类型
printf("%d\n",*(int *)p);        
p = &b;
printf("%f\n",*(float*)p);

hack3er 发表于 2013-3-29 10:07:31

本帖最后由 hack3er 于 2013-3-29 10:09 编辑

mengfc 发表于 2013-3-29 09:51 static/image/common/back.gif
楼主,C语言应该系统的学一下,特别是指针部分。C语言的精华就在指针。
指向任意类型的指针类型是void * p ...

谢谢,void *这个我知道,但是有时候也不好用。
比如使用的时候数据类型不确定或无规律呢?

假如如下的情况:

void *p1,*p2;
unsigned char i;

unsigned char a1=3;
unsigned char a2=4;

char b1=5;
char b2=6;

unsigned short c1=34567;
short c2=4578;

float d1=5.354;
long d2=64545487;

switch(i)
{
case 0:
    p1=&a1;
    p2=&a2;
    break;
case 1:
    p1=&b1;
    p2=&b2;
    break;
case 2:
    p1=&c1;
    p2=&c2;
    break;
case 3:
    p1=&d1;
    p2=&d2;
    break;
}
然后每次不同i的情况下使用*p1,*p2
数据的类型都是不一样的,难道每次都手工去指派数据类型么?
假如有N多的变量,但是某一状态下只要用到其中一两个。
每次都要手工去干预数据类型的指派,多费事?
这样的话,还不如直接赋值来的快。
有没有什么办法让不同i的时候知道转成对应的数据类型?

jm2011 发表于 2013-3-29 10:21:17

感觉像C++里面的多态机制;
这样用不怕出危险?

hack3er 发表于 2013-3-29 10:25:04

jm2011 发表于 2013-3-29 10:21 static/image/common/back.gif
感觉像C++里面的多态机制;
这样用不怕出危险?

那处理某状态下只用多数据中的某一两个数据(数据类型不一定一样)有什么好的方法?

难道只能取值->缓存->再赋值?

这样很费程序空间的。。

hack3er 发表于 2013-3-29 10:56:02

顶起,沉的真快。。。

snower 发表于 2013-3-29 10:59:34

用union来实现

hack3er 发表于 2013-3-29 11:06:40

snower 发表于 2013-3-29 10:59 static/image/common/back.gif
用union来实现

能详细些?

error_dan 发表于 2013-3-29 11:16:15

这样是不安全的用法,不知道数据类型怎么做处理?知道了数据类型就意味着传递的时候已经指明了数据类型,既然已经指明了那这个问题就不存在了.5L提到的问题,在C里面没有办法解决.

snower 发表于 2013-3-29 11:22:08

union {
struct {
    unsigned char a1;
    unsigned char a2;
};
struct {
    char b1;
    char b2;
};
struct {
    unsigned short c1;
    short c2;
};
struct {
    float d1;
    long d2;
};
} data;

data.d1 = 5.354;
data.d2 = 64545487;
页: [1]
查看完整版本: c语言中,如何实现指向任意数据类型的指针?