c - 使用C中的指针从int变量访问字符
问题描述
为什么下面代码的输出是-127。为什么不应该是-1?
#include<stdio.h>
int main(){
int a = 129;
char *ptr;
ptr = (char *)&a;
printf("%d ",*ptr);
return 0;
}
解决方案
如果您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
.
推荐阅读
- html - TE2000 HMI 事件记录器 - 保存在文本文件中
- sparql - 从 Wikidata itemLabel 返回 Wikidpedia 标签的 SPARQL 查询
- camera - 如何解决函数“namedWindow”中的 cv2.error 'winname.empty()?
- laravel - 根据 id 更改类别颜色
- android - 如何在 SearchView 中垂直居中查询提示文本
- c - 如何编写读取 C 源代码和测试变量命名约定的程序?
- vue.js - 如何使用 Nuxt.js 在 Element-UI 中使用自定义主题?
- python - SpaCy 基于规则的人员模式匹配
- java - 在 Eclipse 中为 Java 格式化连接字符串
- php - Laravel 简单查询在服务器上花费了 30 多秒