#include<stdio.h>
int main()
{
int a = 12;
void *ptr = (int *)&a;
printf("%d", *ptr);
getchar();
return 0;
}
在上面的代码中,在void *ptr = (int *)&a;
行处,指针不是类型转换为int吗?
Per C 2018 6.5.16.1 1,当左侧操作数的类型为void *
时,右侧操作数的类型可能为int *
:
以下内容之一应满足…左操作数具有原子,限定或不限定的指针类型,并且(考虑到左操作数在左值转换后将具有的类型),一个操作数是指向对象类型的指针,而另一个是指向void的合格或不合格版本的指针,并且左侧指向的类型具有右侧指向的类型的所有限定符…
根据6.5.16.1 2,然后右操作数将自动转换为左操作数的类型:
…右操作数的值将转换为赋值表达式的类型…