首页 > 解决方案 > c 中指针的 int,unsigned int 类型转换

问题描述

我是 C 中指针的新手。请帮助我使用以下代码:

void main()
{
    int i=3;
    printf("unsighed Address of i = %u \n",(unsigned int)&i);
    printf("int Address of i = %d\n",(int)&i);
    printf("pointer Address of i = %p\n",&i);
    printf("Value of i = %d\n",i);
}

输出:

unsighed Address of i = 3219915640 
int Address of i = -1075051656
pointer Address of i = 0xbfec0378
Value of i = 3

如您所见,我只是在检查ithrough intunsigned int和 pointer 的地址。无符号值和指针值相同(base16 的 0xbfec0378 = base10 的 3219915640)。但整数值不同。int 范围是(-32768 到 32767)。所以我不知道我是怎么得到-1075051656的。你能解释一下吗。

标签: cpointerscasting

解决方案


你的基地在哪里int range is (-32768 to 32767)?这意味着大小为 2 个字节。我不认为是这样,因为-1075051656int(您将地址转换为int)。

要检查intuse的大小sizeof(int),或查找它表示的值的区间,请使用INT_MIN, INT_MAX常量。

您系统中的大小int可能是 4 个字节(32 位),间隔-21474836482147483647. 有了unsigned int它来自0 to 4,294,967,295.

因此,您可以使用 打印该值unsigned int,但在转换为intsince 时会溢出4294967295 > 3219915640 > 2147483647


推荐阅读