首页 > 解决方案 > 使用C中的指针从int变量访问字符

问题描述

为什么下面代码的输出是-127。为什么不应该是-1?

#include<stdio.h>
int main(){
    int a = 129;
    char *ptr;
    ptr = (char *)&a;
    printf("%d ",*ptr);
    return 0;
}

标签: ccharbit-representation

解决方案


如果您a以十六进制输出变量,您将看到它表示为0x81.

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    int a = 129;
    
    printf( "%#x\n", a );
    
    return 0;
}

它的输出是

0x81

0x80是 char 类型的对象的最小值,如果 char 类型的行为与带符号的 char 类型相同。该值等于十进制值-128

这是另一个演示程序。

#include <stdio.h>

int main(void) 
{
    char c = -128;
    
    printf( "%#hhx\n", c );
    
    return 0;
}

它的输出是

0x80

如果添加1您将获得价值-127

字符值的二进制补码表示形式-1看起来像0xff. 如果添加1您将获得0.


推荐阅读