Var*_*roo 0 c c++ pointers casting function
int main
{
void* i;
printf("%d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:(垃圾值)void指针如何确定没有类型转换的数据类型?
void指针如何在没有类型转换的情况下确定数据类型?
未初始化的指针值被强制转换为a int并int打印出来.
严格地说,由于两个问题,您的程序会受到不确定的行为的影响:
int的预期printf.编译器通常不会打扰传递给函数的参数类型printf.
该函数按以下方式声明
int printf(const char * restrict format, ...);
Run Code Online (Sandbox Code Playgroud)
如您所见,只有第一个参数具有明确指定的类型.一般情况下,编译器无法检查其他参数是否有效.
当函数执行时,它解析其第一个参数搜索格式指定,并根据这些格式说明符尝试解释以下参数.
在您的示例中,格式字符串具有格式说明符 %d
printf("%d",i);
Run Code Online (Sandbox Code Playgroud)
因此该函数将i的值解释为类型int.考虑到(C标准)
如果任何参数不是相应转换规范的正确类型,则行为未定义.
除此之外,你甚至没有初始化变量i.
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |