void * ptr =(int *)&a;是否不强制转换指针

问题描述 投票:0回答:1
#include<stdio.h> 
int main() 
{ 
    int a = 12; 
    void *ptr = (int *)&a; 
    printf("%d", *ptr);
    getchar(); 
    return 0; 
}

在上面的代码中,在void *ptr = (int *)&a;行处,指针不是类型转换为int吗?

c void-pointers
1个回答
0
投票

Per C 2018 6.5.16.1 1,当左侧操作数的类型为void *时,右侧操作数的类型可能为int *

以下内容之一应满足…左操作数具有原子,限定或不限定的指针类型,并且(考虑到左操作数在左值转换后将具有的类型),一个操作数是指向对象类型的指针,而另一个是指向void的合格或不合格版本的指针,并且左侧指向的类型具有右侧指向的类型的所有限定符…

根据6.5.16.1 2,然后右操作数将自动转换为左操作数的类型:

…右操作数的值将转换为赋值表达式的类型…

© www.soinside.com 2019 - 2024. All rights reserved.