-2

抱歉这个 Noobie 问题,我只是无法使以下任何一个代码工作?

片段1:

int main(void) {
    void *ptr;
    *ptr = 1;
    printf("%d", *ptr);
    return 0;
}

片段2:

int main(void) {
    void *ptr;
    int a = 1;
    ptr = &a;
    printf("%d", *ptr);
    return 0;
}

片段3:

int main(void) {
    void *ptr;
    int a = 1;
    (int*)ptr = &a;
    printf("%d", *ptr);
    return 0;
}

任何想法?

4

4 回答 4

1

Snippet 1
您不能取消引用 void 指针。
Snippet 2
同样的错误。
Snippet 3
*(int*)ptr = &a;不需要。void 指针可以保存任何类型的指针的地址。

如果您想使用 void 指针,您可以执行以下操作
void *p;
int a=5;
int *i_ptr = NULL;
p = &a
i_ptr = p
printf("\n %d",*i_ptr);

在这里,您将地址从 void 指针复制到整数指针。但是您必须确保 p 包含指向 int 的指针的地址以进行正确的类型转换。

于 2012-10-25T09:31:12.767 回答
1

片段 1 没有任何意义。您正试图将某些东西存储到“虚空”中,这是不可能的。

片段 2 是有道理的,但由于您不能获取“指向 void 的指针”的内容,因此不能使用 *ptr。相反,将其转换为指向 int 的指针,然后获取它的内容。 printf("%d", *(int*)ptr);

Snippet 3 没有任何意义,类型转换不是有效的 C 语法。除此之外,它与片段 2 有相同的问题。

于 2012-10-25T10:47:30.480 回答
1

您可以像这样将指针类型转换到位(在片段 3 中)

printf("%d",*(int*)ptr);

在所有 3 个片段中,您都在取消引用 void 指针。这是标准不允许的(或者是未定义的行为,我不记得了)。

于 2012-10-25T09:32:48.277 回答
0

解引用void指针是undefined behaviour

你应该试试这个

ptr=(int*)&a;

创建一个类型的指针int

然后将这个ptr分配给那个,你可以取消引用那个指针

int *p;
p=ptr;
printf("%d",*p);
于 2012-10-25T09:25:55.940 回答