首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >warning_cast.c: In function ?fn_print?:warning_cast.c:5: warning:强制转换为不同大小的整数的指针

warning_cast.c: In function ?fn_print?:warning_cast.c:5: warning:强制转换为不同大小的整数的指针
EN

Stack Overflow用户
提问于 2015-02-26 14:43:05
回答 2查看 99关注 0票数 0

warning_cast.c: In function ?fn_print?:warning_cast.c:5: warning:强制转换为不同大小的整数的指针

代码语言:javascript
复制
#include <stdio.h>

void fn_print(unsigned int a)
{
    printf("val = %d\n", *((unsigned int *)a));
}

int main()
{
    fn_print(10000);
}
EN

回答 2

Stack Overflow用户

发布于 2015-02-26 14:49:18

替换

printf("val = %d\n", *((unsigned int *)a)); <--将整数转换为整数指针

使用

printf("val = %d\n", *((unsigned int *)&a)); <--将地址转换为整数指针

编辑:

基于评论:

这可能会删除函数fn_printf中的警告

代码语言:javascript
复制
void fn_print(unsigned int* a)
{
    printf("val = %d\n", *a);
}

int main()
{
    unsigned int x = 10000;
    fn_print((unsigned int*)x);
}

如果你问的是如何使编译器警告静音,那么我的回答是不要这样做。

票数 0
EN

Stack Overflow用户

发布于 2015-02-26 15:06:12

也许你想要这个。将地址传递给fn_print,并在函数中使用*运算符取消对指针的引用。

代码语言:javascript
复制
#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位对吗?)。

要让自己相信这一点,请尝试

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    printf("sizeof(unsigned int)=%u\n", sizeof(unsigned int));
    printf("sizeof(unsigned int*)=%u\n", sizeof(unsigned int*));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28736075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档