读书人

关于一级指针强转void*的有关问题.求解

发布时间: 2013-07-09 09:50:47 作者: rapoo

关于一级指针强转void**的问题..求解答~
char* string = "abcdefghijk";
void* v_str_p = ((void**)string)[0]; //强制转换为二级指针...其实这里应该是一个 void* array[] array中每个元素都是一个void*

疑问是我如何解开 v_str_p 这个void* 指针...而拿到他实际的value...
我的想法是 *((char*)v_str_p + ?) 来拿到其中一个元素... 但是这样却不对....请高手为我解答一下 ,小弟感激不尽~~~
指针
[解决办法]


char* string = "abcdefghijk";
void* v_str_p = ((void**)string)[0];
int i = (int)v_str_p;
char* p = (char*)&i;
printf("%c%c%c%c\n", p[0], p[1], p[2], p[3]); //abcd

不要折腾自己的脑细胞咯.
[解决办法]
引用:
Quote: 引用:

char* string = "abcdefghijk";
void* v_str_p = ((void**)string)[0]; //强制转换为二级指针...其实这里应该是一个 void* array[] array中每个元素都是一个void*

疑问是我如何解开 v_str_p 这个void* 指针...而拿到他实际的value...
我的想法是 *((char*)v_str_p + ?) 来拿到其中一个元素... 但是这样却不对....请高手为我解答一下 ,小弟感激不尽~~~



struct Array_T {
int length;
int size;
char *array;
};

struct Seq_T {
struct Array_T array;
int length;
int head;
};
typedef struct Seq_T *Seq_T;

void *Seq_get(Seq_T seq, int i) {
assert(seq);
assert(i >= 0 && i < seq->length);
return ((void **)seq->array.array)[(seq->head + i)%seq->array.length];
}

就像这个函数的return的void* 一样..那它这么做有什么意义呢? 已经无法找到这个sring了呢....

按照你的说法 v_str_p 只留下了 sizeof(void) ?


他这样写我只想到一个原因,就是Array_T中的array其实并不是一个char*,而仅仅用来指向一个动态分配的内存块,至于内存块里面放的是什么东西,那就取决于访问代码。在上面这段代码中,这个内存块被看成是一具void*数组。(

读书人网 >C语言

热点推荐