warning_cast.c: In function ?fn_print?:warning_cast.c:5: warning:强制转换为不同大小的整数的指针
#include <stdio.h>
void fn_print(unsigned int a)
{
printf("val = %d\n", *((unsigned int *)a));
}
int main()
{
fn_print(10000);
}发布于 2015-02-26 14:49:18
替换
printf("val = %d\n", *((unsigned int *)a)); <--将整数转换为整数指针
使用
printf("val = %d\n", *((unsigned int *)&a)); <--将地址转换为整数指针
编辑:
基于评论:
这可能会删除函数fn_printf中的警告
void fn_print(unsigned int* a)
{
printf("val = %d\n", *a);
}
int main()
{
unsigned int x = 10000;
fn_print((unsigned int*)x);
}如果你问的是如何使编译器警告静音,那么我的回答是不要这样做。
发布于 2015-02-26 15:06:12
也许你想要这个。将地址传递给fn_print,并在函数中使用*运算符取消对指针的引用。
#include <stdio.h>
void fn_print(unsigned int* a)
{
printf("at address %p we have value %u\n", a, *a);
}
int main()
{
unsigned int a = 10000;
fn_print(&a);
}您面临的警告是因为当您从unsigned int转换为unsigned int*时,您是在系统上不同大小的类型之间进行转换(64位对吗?)。
要让自己相信这一点,请尝试
#include <stdio.h>
int main()
{
printf("sizeof(unsigned int)=%u\n", sizeof(unsigned int));
printf("sizeof(unsigned int*)=%u\n", sizeof(unsigned int*));
}https://stackoverflow.com/questions/28736075
复制相似问题